服务链 - Java

时间:2017-04-02 14:50:21

标签: java rest sockets invocation

目前我使用多个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上发送了多个请求?有没有办法实现这个"服务链接"?

1 个答案:

答案 0 :(得分:1)

你的想法是合理的,但不能用这种天真的方法来实现。

您要实现的目标是位置透明度,同时保持系统响应,这不是一件容易的事。

框架可以解决这个问题,AKKA浮现在脑海中。

如果你的目标只是关注点的分离(每个服务处理是问题的一部分并调用其他服务来获得它需要的东西),你可以使用相关的类而不需要http请求从服务器到自身。

如果您希望能够跨多个节点分发服务,那么您应该依赖于像akka这样的框架,自己动手做是不可行的。