use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ServiceRegistryTest method test_listen_to_discovery_events.
@ParameterizedTest
@MethodSource("metadataCodecSource")
public void test_listen_to_discovery_events(MetadataCodec metadataCodec) {
Sinks.Many<ServiceDiscoveryEvent> processor = Sinks.many().replay().all();
List<Microservices> cluster = new CopyOnWriteArrayList<>();
Microservices seed = Microservices.builder().discovery(defServiceDiscovery(metadataCodec)).transport(RSocketServiceTransport::new).services(new AnnotationServiceImpl()).startAwait();
cluster.add(seed);
seed.listenDiscovery().subscribe(processor::tryEmitNext, processor::tryEmitError, processor::tryEmitComplete);
Address seedAddress = seed.discovery().address();
StepVerifier.create(processor.asFlux().onBackpressureBuffer()).then(() -> {
Microservices ms1 = Microservices.builder().discovery(defServiceDiscovery(seedAddress, metadataCodec)).transport(RSocketServiceTransport::new).services(new GreetingServiceImpl()).startAwait();
cluster.add(ms1);
}).assertNext(event -> assertEquals(ENDPOINT_ADDED, event.type())).then(() -> {
Microservices ms2 = Microservices.builder().discovery(defServiceDiscovery(seedAddress, metadataCodec)).transport(RSocketServiceTransport::new).services(new GreetingServiceImpl()).startAwait();
cluster.add(ms2);
}).assertNext(event -> assertEquals(ENDPOINT_ADDED, event.type())).then(() -> cluster.remove(2).shutdown().block(TIMEOUT)).assertNext(event -> assertEquals(ENDPOINT_LEAVING, event.type())).assertNext(event -> assertEquals(ENDPOINT_REMOVED, event.type())).then(() -> cluster.remove(1).shutdown().block(TIMEOUT)).assertNext(event -> assertEquals(ENDPOINT_LEAVING, event.type())).assertNext(event -> assertEquals(ENDPOINT_REMOVED, event.type())).thenCancel().verify(TIMEOUT);
StepVerifier.create(seed.call().api(AnnotationService.class).serviceDiscoveryEventTypes()).assertNext(type -> assertEquals(ENDPOINT_ADDED, type)).assertNext(type -> assertEquals(ENDPOINT_ADDED, type)).assertNext(type -> assertEquals(ENDPOINT_LEAVING, type)).assertNext(type -> assertEquals(ENDPOINT_REMOVED, type)).assertNext(type -> assertEquals(ENDPOINT_LEAVING, type)).assertNext(type -> assertEquals(ENDPOINT_REMOVED, type)).thenCancel().verify(TIMEOUT);
Mono.whenDelayError(cluster.stream().map(Microservices::shutdown).toArray(Mono[]::new)).block(TIMEOUT);
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class RoutersTest method setup.
@BeforeAll
public static void setup() {
gateway = Microservices.builder().discovery(serviceEndpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(serviceEndpoint))).transport(RSocketServiceTransport::new).startAwait();
gatewayAddress = gateway.discovery().address();
// Create microservices instance cluster.
provider1 = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(endpoint)).membership(cfg -> cfg.seedMembers(gatewayAddress))).transport(RSocketServiceTransport::new).services(ServiceInfo.fromServiceInstance(new GreetingServiceImpl(1)).tag("ONLYFOR", "joe").tag("SENDER", "1").build(), ServiceInfo.fromServiceInstance(new GreetingServiceImplA()).tag("Weight", "0.1").build()).startAwait();
// Create microservices instance cluster.
provider2 = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(endpoint)).membership(cfg -> cfg.seedMembers(gatewayAddress))).transport(RSocketServiceTransport::new).services(ServiceInfo.fromServiceInstance(new GreetingServiceImpl(2)).tag("ONLYFOR", "fransin").tag("SENDER", "2").build(), ServiceInfo.fromServiceInstance(new GreetingServiceImplB()).tag("Weight", "0.9").build()).startAwait();
TagService tagService = input -> input.map(String::toUpperCase);
provider3 = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(endpoint)).membership(cfg -> cfg.seedMembers(gatewayAddress))).transport(RSocketServiceTransport::new).services(ServiceInfo.fromServiceInstance(tagService).tag("tagB", "bb").tag("tagC", "c").build()).startAwait();
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ServiceRemoteTest method test_remote_serviceA_calls_serviceB_with_dispatcher.
@Test
public void test_remote_serviceA_calls_serviceB_with_dispatcher() {
// getting proxy from any node at any given time.
CoarseGrainedServiceImpl another = new CoarseGrainedServiceImpl();
// Create microservices instance cluster.
Microservices provider = Microservices.builder().discovery(ServiceRemoteTest::serviceDiscovery).transport(RSocketServiceTransport::new).services(// add service a and b
another).startAwait();
// Get a proxy to the service api.
CoarseGrainedService service = gateway.call().api(CoarseGrainedService.class);
String response = service.callGreetingWithDispatcher("joe").block(Duration.ofSeconds(5));
assertEquals(response, " hello to: joe");
provider.shutdown().then(Mono.delay(TIMEOUT2)).block();
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ServiceCallRemoteTest method test_custom_error_mapper.
@Test
public void test_custom_error_mapper() {
GreetingService service = new ServiceCall().errorMapper(message -> {
throw new RuntimeException("custom error mapper");
}).transport(new RSocketServiceTransport().start().block().clientTransport()).router(ServiceCallRemoteTest::route).api(GreetingService.class);
StepVerifier.create(service.exceptionRequest(new GreetingRequest())).expectErrorSatisfies(throwable -> {
Assertions.assertEquals(RuntimeException.class, throwable.getClass());
Assertions.assertEquals("custom error mapper", throwable.getMessage());
}).verify(TIMEOUT);
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ServiceTagsExample method main.
/**
* Main runner.
*
* @param args arguments
*/
public static void main(String[] args) {
Microservices gateway = Microservices.builder().discovery(serviceEndpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(serviceEndpoint))).transport(RSocketServiceTransport::new).startAwait();
Address seedAddress = gateway.discovery().address();
Microservices services1 = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(endpoint)).membership(cfg -> cfg.seedMembers(seedAddress))).transport(RSocketServiceTransport::new).services(ServiceInfo.fromServiceInstance(new GreetingServiceImplA()).tag("Weight", "0.3").build()).startAwait();
Microservices services2 = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(endpoint)).membership(cfg -> cfg.seedMembers(seedAddress))).transport(RSocketServiceTransport::new).services(ServiceInfo.fromServiceInstance(new GreetingServiceImplB()).tag("Weight", "0.7").build()).startAwait();
CanaryService service = gateway.call().router(WeightedRandomRouter.class).api(CanaryService.class);
for (int i = 0; i < 10; i++) {
Mono.from(service.greeting(new GreetingRequest("joe"))).doOnNext(success -> {
success.getResult().startsWith("B");
System.out.println(success);
});
}
}
Aggregations