java - 服务链 - Java

标签 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查询 - REST服务由于SocketTimeouts而中断,我假设是因为在同一个服务器套接字上发送了多个请求?有没有办法实现这种“服务链”?

最佳答案

你的想法很合理,但无法用如此幼稚的方法来实现。

您想要实现的是位置透明,同时保持系统响应,这不是一件容易的任务。

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

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

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

关于java - 服务链 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169714/

相关文章:

Spring分页-请求参数

python - 在 Python 中从 IP 地址和掩码长度获取 IP 掩码

java - 从 java 调用 perl

java - 如何选择特定日期(当 : type = "date") in Selenium WebDriver?

java - GridBagLayout Java 中的边距/填充

java - 以编程方式加载 Log4j2 配置文件

mysql - Scala中从数据库获取数据写入Json格式

java - 如何对传入的 Jersey MultiPart 请求进行单元测试处理

sockets - SCTP:成功connect()调用后,SCTP套接字的sctp status.sstate值应该是什么?

java - 套接字连接半断开 - 未抛出 IOException