目前我使用多个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查询 - 由于SocketTimeout而导致REST服务中断时,我假设因为在同一个serversocket上发送了多个请求?有没有办法实现这个"服务链接"?
答案 0 :(得分:1)
你的想法是合理的,但不能用这种天真的方法来实现。
您要实现的目标是位置透明度,同时保持系统响应,这不是一件容易的事。
有大框架可以解决这个问题,AKKA浮现在脑海中。
如果你的目标只是关注点的分离(每个服务处理是问题的一部分并调用其他服务来获得它需要的东西),你可以使用相关的类而不需要http请求从服务器到自身。
如果您希望能够跨多个节点分发服务,那么您应该依赖于像akka这样的框架,自己动手做是不可行的。