use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class Example1 method main.
/**
* Main method.
*
* @param args - program 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();
final Address gatewayAddress = gateway.discovery().address();
Microservices service2Node = 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(new Service2Impl()).startAwait();
Microservices service1Node = 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(new Service1Impl()).startAwait();
gateway.call().api(Service1.class).manyDelay(100).publishOn(Schedulers.parallel()).take(10).log("receive |").collectList().log("complete |").block();
Mono.whenDelayError(gateway.shutdown(), service1Node.shutdown(), service2Node.shutdown()).block();
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class Example1 method main.
/**
* Start the example.
*
* @param args ignored
*/
public static void main(String[] args) {
// ScaleCube Node with no members
Microservices seed = Microservices.builder().discovery(serviceEndpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).options(opts -> opts.metadata(serviceEndpoint))).transport(RSocketServiceTransport::new).defaultContentType(// set explicit default data format
PROTOSTUFF).startAwait();
final Address seedAddress = seed.discovery().address();
// Construct a ScaleCube node which joins the cluster hosting the Greeting Service
Microservices ms = 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(new GreetingServiceImpl()).startAwait();
seed.call().api(GreetingsService.class).sayHello("joe (on default dataFormat PROTOSTUFF)").subscribe(consumer -> System.out.println(consumer.message()));
seed.call().contentType(JSON).api(GreetingsService.class).sayHello("alice (on JSON dataFormat)").subscribe(consumer -> System.out.println(consumer.message()));
seed.call().contentType(OCTET_STREAM).api(GreetingsService.class).sayHello("bob (on java native Serializable/Externalizable dataFormat)").subscribe(consumer -> System.out.println(consumer.message()));
seed.onShutdown().block();
ms.onShutdown().block();
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ErrorFlowTest method initNodes.
@BeforeAll
public static void initNodes() {
provider = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).transport(cfg -> cfg.port(PORT.incrementAndGet())).options(opts -> opts.metadata(endpoint))).transport(RSocketServiceTransport::new).services(new GreetingServiceImpl()).startAwait();
final Address seedAddress = provider.discovery().address();
consumer = Microservices.builder().discovery(endpoint -> new ScalecubeServiceDiscovery().membership(cfg -> cfg.seedMembers(seedAddress)).transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory())).transport(cfg -> cfg.port(PORT.incrementAndGet())).options(opts -> opts.metadata(endpoint))).transport(RSocketServiceTransport::new).startAwait();
}
use of io.scalecube.services.transport.rsocket.RSocketServiceTransport in project scalecube by scalecube.
the class ServiceCallLocalTest 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(ServiceCallLocalTest::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 ServiceRegistryTest method test_delayed_listen_to_discovery_events.
@ParameterizedTest
@MethodSource("metadataCodecSource")
public void test_delayed_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 GreetingServiceImpl()).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(), new AnnotationServiceImpl()).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())).thenCancel().verify(TIMEOUT);
StepVerifier.create(seed.call().api(AnnotationService.class).serviceDiscoveryEventTypes()).assertNext(type -> assertEquals(ENDPOINT_ADDED, type)).assertNext(type -> assertEquals(ENDPOINT_ADDED, type)).thenCancel().verify(TIMEOUT);
Mono.whenDelayError(cluster.stream().map(Microservices::shutdown).toArray(Mono[]::new)).block(TIMEOUT);
}
Aggregations