目前我正在使用多个 REST 服务来处理我的数据。 工作流程如下:
用户请求汽车的速度: 向 SpeedService 询问最新的速度 => SpeedService 向 PositionService 请求汽车的最新位置,PositionService 通过调用 DatabaseService 来从汽车获取原始的未处理数据来实现这一点。然而,我遇到问题的部分是使用另一个服务调用一个服务。我现在已经通过使用调用 API 实现了这一点。
示例:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://mylocalRestserver.example/webresources/").path("speed");
target = target.queryParam("carId", carId);
Invocation invocation = target.request(MediaType.APPLICATION_JSON).buildGet();
Speed speed = new Genson().deserialize(invocation.invoke(String.class), Speed.class);
return speed;
但是,每当我尝试模拟并发用户时 - 运行多个curl查询 - REST服务由于SocketTimeouts而中断,我假设是因为在同一个服务器套接字上发送了多个请求?有没有办法实现这种“服务链”?
最佳答案
你的想法很合理,但无法用如此幼稚的方法来实现。
您想要实现的是位置透明,同时保持系统响应,这不是一件容易的任务。
有大型框架可以解决这个问题,AKKA 浮现在我的脑海中。
如果您的目标只是关注点分离(每个服务处理的是问题的一部分并调用其他服务来获取它所需要的),您可以只使用相关的类而不发出http请求从服务器到自身。
如果您希望能够跨多个节点分发服务,您应该依赖像 akka 这样的框架,自己做是一项不可行的任务。
关于java - 服务链 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169714/