/** * Add a method call consumer directly to the bundle. * * @param address address of method call consumer * @param service method call consumer acting as a service. * @return this, fluent */ default ServiceBundle addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { this.addServiceObject(address, service); return this; }
default ServiceEndpointServer addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { serviceBundle().addServiceObject(address, service); return this; }
/** * Add a service object with an address alias * * @param address address * @param serviceObject service object * @return this, fluent. */ @SuppressWarnings("UnusedReturnValue") default ServiceEndpointServer addServiceObject(String address, Object serviceObject) { serviceBundle().addServiceObject(address, serviceObject); return this; }
@Test public void testAddService() throws Exception { serviceBundle.addServiceObject("/adder", adderService); final List<String> endPoints = serviceBundle.endPoints(); puts(endPoints); endPoints.contains("/foo/adder"); }
@Test //Works public void testWithServiceBundle() { final ServiceBundleBuilder serviceBundleBuilder = ServiceBundleBuilder.serviceBundleBuilder(); final ServiceBundle serviceBundle = serviceBundleBuilder.build().startServiceBundle(); serviceBundle.addServiceObject("foo", new FeedServiceImpl()); final FeedService feedService = serviceBundle.createLocalProxy(FeedService.class, "foo"); final Promise<List<FeedMeta>> listPromise = feedService.listFeeds().asHandler() .invokeAsBlockingPromise(Duration.ofSeconds(30)); ServiceProxyUtils.flushServiceProxy(feedService); final List<FeedMeta> feedMetas = listPromise.asHandler().get(); assertNotNull(feedMetas); assertEquals(1, feedMetas.size()); assertEquals("Hello", feedMetas.get(0).name); serviceBundle.stop(); }
/** * Add a method call consumer directly to the bundle. * * @param address address of method call consumer * @param service method call consumer acting as a service. * @return this, fluent */ default ServiceBundle addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { this.addServiceObject(address, service); return this; }
default ServiceBundle addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { this.addServiceObject(address, service); return this; }
@Before public void setup() { systemManager = new QBitSystemManager(); eventManager = EventManagerBuilder .eventManagerBuilder().setName("Event Bus") .build(); serviceBundleBuilder = ServiceBundleBuilder.serviceBundleBuilder() .setEventManager(eventManager) .setSystemManager(systemManager); final ServiceBundle serviceBundle = serviceBundleBuilder.buildAndStart(); serviceBundle.addServiceObject("eventManager", eventManager); serviceB = new ServiceB(); serviceBundle.addServiceObject("serviceB", serviceB); ServiceA serviceA = new ServiceA(serviceBundle.createLocalProxy(EventManager.class, "eventManager")); serviceBundle.addServiceObject("serviceA", serviceA); serviceAQueueProxy = serviceBundle.createLocalProxy(ServiceAInterface.class, "serviceA"); serviceBundle.startReturnHandlerProcessor(); }
@Test public void testWithServiceBundle() throws Exception { final ServiceBundleBuilder serviceBundleBuilder = ServiceBundleBuilder.serviceBundleBuilder(); serviceBundleBuilder.setCallbackManager(callbackManager); final ServiceBundle serviceBundle = serviceBundleBuilder.build(); serviceBundle.addServiceObject("abc", new MyService()); final IMyService myService = serviceBundle.createLocalProxy(IMyService.class, "abc"); serviceBundle.start(); final CountDownLatch countDownLatch = new CountDownLatch(1); callbackBuilder.setCallback(Object.class, o -> { result.set(o); countDownLatch.countDown(); }); myService.method1(callbackBuilder.build()); ServiceProxyUtils.flushServiceProxy(myService); Sys.sleep(500); assertEquals(1, callbackManagerWithTimeout.outstandingCallbacksCount()); continueMethod.countDown(); countDownLatch.await(20, TimeUnit.SECONDS); assertEquals(0, callbackManagerWithTimeout.outstandingCallbacksCount()); assertEquals("METHOD 1 RETURN", result.get()); }
@Before public void setup() { /* test service */ testService = new TestService(); /* service bundle builder */ serviceBundleBuilder = serviceBundleBuilder(); /* service bundle */ serviceBundle = serviceBundleBuilder.build(); serviceBundle.addServiceObject("service", testService); /* vertx event bus bridge to qbit. */ vertxEventBusBridgeBuilder = VertxEventBusBridgeBuilder.vertxEventBusBridgeBuilder(); vertxEventBusBridgeBuilder.addBridgeAddress(address, TestService.class); vertxEventBusBridgeBuilder.setServiceBundle(serviceBundle); serviceBundle.start(); //startall not supported yet for bridge. vertxEventBusBridgeBuilder.build(); /* latch so we can test results coming back from bridge. */ countDownLatch = new CountDownLatch(1); /* grab vertx from the bridge. */ vertx = vertxEventBusBridgeBuilder.getVertx(); ref = new AtomicReference<>(); }
@Test public void callingActualService() { SomeInterface myService = new SomeInterface() { @Override public void method1() { } @Override public void method2(String hi, int amount) { } @Override public String method3(String hi, int amount) { return null; } }; final ServiceBundle bundle = new ServiceBundleBuilder().setAddress("/root").buildAndStart(); bundle.addServiceObject("myService", myService); final SomeInterface myServiceProxy = bundle.createLocalProxy(SomeInterface.class, "myService"); myServiceProxy.method2("hi", 5); Sys.sleep(1000); }
@SuppressWarnings("UnusedReturnValue") default ServiceEndpointServer addServiceObject(String address, Object serviceObject) { serviceBundle().addServiceObject(address, serviceObject); return this; }
/** * Add a service object with an address alias * * @param address address * @param serviceObject service object * @return this, fluent. */ @SuppressWarnings("UnusedReturnValue") default ServiceEndpointServer addServiceObject(String address, Object serviceObject) { serviceBundle().addServiceObject(address, serviceObject); return this; }
default ServiceEndpointServer addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { serviceBundle().addServiceObject(address, service); return this; }
default ServiceEndpointServer addServiceConsumer(String address, Consumer<MethodCall<Object>> service) { serviceBundle().addServiceObject(address, service); return this; }
@Before public void before() { latch = new CountDownLatch(1); returnValue = new AtomicReference<>(); errorRef = new AtomicReference<>(); impl = new ServiceDiscoveryImpl(); empURI = URI.create("marathon://default/employeeService?env=staging"); ServiceBuilder serviceBuilder = ServiceBuilder.serviceBuilder(); serviceBuilder.getRequestQueueBuilder().setArrayBlockingQueue().setBatchSize(10); serviceQueue = serviceBuilder.setServiceObject(impl).buildAndStartAll(); ServiceBundleBuilder serviceBundleBuilder = ServiceBundleBuilder.serviceBundleBuilder(); serviceBundleBuilder.getRequestQueueBuilder().setArrayBlockingQueue().setBatchSize(10); serviceBundle = serviceBundleBuilder.build(); serviceBundle.addServiceObject("myservice", impl); serviceQueue2 = ServiceBuilder.serviceBuilder().setInvokeDynamic(false).setServiceObject(impl) .buildAndStartAll(); serviceDiscoveryServiceBundle = serviceBundle.createLocalProxy(ServiceDiscovery.class, "myservice"); serviceBundle.start(); serviceDiscovery = serviceQueue.createProxyWithAutoFlush(ServiceDiscovery.class, Duration.TEN_MILLIS); serviceDiscoveryStrongTyped = serviceQueue2.createProxyWithAutoFlush(ServiceDiscovery.class, Duration.TEN_MILLIS); }
@Test public void testResponses() throws Exception { call = MethodCallBuilder.methodCallBuilder().setAddress("/foo/adder").setName("add").setBody(Lists.list(1, 2)).build(); serviceBundle.addServiceObject("/adder", adderService); serviceBundle.call(call); serviceBundle.flushSends(); Sys.sleep(1000); responseReceiveQueue = serviceBundle.responses().receiveQueue(); serviceBundle.flush(); Sys.sleep(200); response = responseReceiveQueue.pollWait(); responseBody = response.body(); int sum = Conversions.toInt(responseBody); Assert.assertEquals("Sum should be 3", 3, sum); serviceBundle.stop(); }
@Test public void testIntegrationWithServiceBundle() throws Exception { mdcForHttpRequestInterceptor = new SetupMdcForHttpRequestInterceptor(Sets.set("foo")); final CaptureRequestInterceptor captureRequestInterceptor = new CaptureRequestInterceptor(); captureRequestInterceptor.before(methodCallBuilder.setName("restMethod").setOriginatingRequest(httpRequest).build()); final ServiceBundle serviceBundle = ServiceBundleBuilder.serviceBundleBuilder() .setBeforeMethodCallOnServiceQueue(BeforeMethodCallChain.beforeMethodCallChain(captureRequestInterceptor, mdcForHttpRequestInterceptor)) .setAfterMethodCallOnServiceQueue(AfterMethodCallChain.afterMethodCallChain(captureRequestInterceptor, mdcForHttpRequestInterceptor)) .setBeforeMethodSent(new ForwardCallMethodInterceptor(new RequestContext())).build().startServiceBundle(); serviceBundle.addServiceObject("my", new MyServiceImpl()); final MyService localProxy = serviceBundle.createLocalProxy(MyService.class, "my"); final AsyncFutureCallback<String> callback = AsyncFutureBuilder.asyncFutureBuilder().build(String.class); localProxy.getRequestURI(callback); localProxy.clientProxyFlush(); assertEquals("/foo", callback.get()); final AsyncFutureCallback<Map<String, String>> callbackMap = AsyncFutureBuilder.asyncFutureBuilder() .buildMap(String.class, String.class); localProxy.getMDC(callbackMap); localProxy.clientProxyFlush(); validate(callbackMap.get()); captureRequestInterceptor.after(null, null); serviceBundle.stop(); }
@Before public void setup() { /* Create the serviceBundleBuilder. */ final ServiceBundleBuilder serviceBundleBuilder = serviceBundleBuilder(); /* Create the service bundle. */ serviceBundle = serviceBundleBuilder.build(); /* Add the AuditorImpl instance to the serviceBundle. */ serviceBundle.addServiceObject(auditorAddress, new AuditorImpl()); /* Create a service client proxy for the auditor. */ auditor = serviceBundle.createLocalProxy(Auditor.class, auditorAddress); /* Create a todo manager and pass the client proxy of the auditor to it. */ final TodoManagerImpl todoManager = new TodoManagerImpl(auditor); // Add the todoManager to the serviceBundle. serviceBundle .addServiceObject(todoAddress, todoManager); //Create a client proxy to communicate with the service actor. client = serviceBundle.createLocalProxy(TodoManagerClient.class, todoAddress); // Start the service bundle. serviceBundle.start(); }
public static void main(final String... args) throws Exception { //To test locally use https://hub.docker.com/r/samuelebistoletti/docker-statsd-influxdb-grafana/ final URI statsdURI = URI.create("udp://192.168.99.100:8125"); //For timer final Reactor reactor = Reactor.reactor(); /* Create the ManagedServiceBuilder which manages a clean shutdown, health, stats, etc. */ final ManagedServiceBuilder managedServiceBuilder = ManagedServiceBuilder.managedServiceBuilder() .setRootURI("/v1") //Defaults to services .setPort(8888); //Defaults to 8080 or environment variable PORT /** Enable statsD */ enableStatsD(managedServiceBuilder, statsdURI); final StatsCollector statsCollector = managedServiceBuilder.createStatsCollector(); /** Create todo impl. */ final TodoManagerImpl impl = new TodoManagerImpl(reactor, statsCollector); /** Create service bundle for internal todo manager. */ final ServiceBundle serviceBundle = managedServiceBuilder.createServiceBundleBuilder().build(); serviceBundle.addServiceObject("todoManager", impl).startServiceBundle(); /** Create TodoManager. */ final TodoManager todoManager = serviceBundle.createLocalProxy(TodoManager.class, "todoManager"); /** Start the REST/Websocket service. */ managedServiceBuilder.addEndpointService(new TodoService(todoManager)).getEndpointServerBuilder() .build().startServer(); /* Start the admin builder which exposes health end-points and swagger meta data. */ managedServiceBuilder.getAdminBuilder().build().startServer(); System.out.println("Todo Server and Admin Server started"); }