### Question:
ServiceRouter extends AbstractInit implements Router { public void asyncCallService(ServiceContext serviceContext) { ActorWrapper actorRef = chooseOne(serviceContext); actorRef.tell(serviceContext); } ServiceRouter(ServiceConfig serviceConfig, FlowerFactory flowerFactory);  ServiceRouter(ServiceConfig serviceConfig, FlowerFactory flowerFactory, int actorNumber); Object syncCallService(ServiceContext serviceContext); void asyncCallService(ServiceContext serviceContext); void asyncCallService(ServiceContext serviceContext, ActorRef sender); ServiceConfig getServiceConfig(); @Override String toString();  }### Answer:
@Test public void testAsyncCallServiceSimple() throws Exception { String flowName = getClass().getSimpleName() + "testAsyncCallServiceSimple"; ServiceFlow serviceFlow = serviceFactory.getOrCreateServiceFlow(flowName); serviceFlow.buildFlow(UserServiceA.class, UserServiceB.class); serviceFlow.buildFlow(UserServiceB.class, UserServiceC1.class); serviceFlow.buildFlow(UserServiceB.class, UserServiceC2.class); User user = new User(); user.setName("响应式编程 "); user.setAge(2); ServiceContext serviceContext = ServiceContextUtil.context(user); serviceContext.setFlowName(flowName); serviceContext.setCurrentServiceName(FlowerServiceUtil.getServiceName(UserServiceA.class)); getServiceRouter(flowName).asyncCallService(serviceContext); }
@Test public void testAsyncCallServiceMutliThread() throws Exception { String flowName = getClass().getSimpleName() + "testAsyncCallServiceMutliThread"; ServiceFlow serviceFlow = serviceFactory.getOrCreateServiceFlow(flowName); serviceFlow.buildFlow(UserServiceA.class, UserServiceB.class); serviceFlow.buildFlow(UserServiceB.class, UserServiceC1.class); final int threadNum = 10; final int numPerThread = 10; for (int i = 0; i < threadNum; i++) { new Thread(() -> { for (int j = 0; j < numPerThread; j++) { User user = new User(); user.setName("响应式编程 - " + j); user.setAge(2); try { ServiceContext serviceContext = ServiceContextUtil.context(user); serviceContext.setFlowName(flowName); serviceContext.setCurrentServiceName(FlowerServiceUtil.getServiceName(UserServiceA.class)); getServiceRouter(flowName).asyncCallService(serviceContext); } catch (Exception e) { e.printStackTrace(); } } }).start(); } }