服务链-Java
目前,我正在使用多个REST服务来处理我的数据。 工作流如下所示: 用户请求汽车的速度: 询问SpeedService最新速度=>SpeedService从PositionService请求车辆的最新位置,PositionService通过调用DatabaseService从车辆获取原始未处理数据来实现此目的。然而,我遇到的问题是用另一个服务调用一个服务。我现在已经通过使用调用api实现了这一点 例如:服务链-Java,java,rest,sockets,invocation,Java,Rest,Sockets,Invocation,目前,我正在使用多个REST服务来处理我的数据。 工作流如下所示: 用户请求汽车的速度: 询问SpeedService最新速度=>SpeedService从PositionService请求车辆的最新位置,PositionService通过调用DatabaseService从车辆获取原始未处理数据来实现此目的。然而,我遇到的问题是用另一个服务调用一个服务。我现在已经通过使用调用api实现了这一点 例如: Client client = ClientBuilder.newClient();
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服务都会因为SocketTimeout而中断,我假设是因为在同一个serversocket上发送了多个请求?有什么方法可以实现这种“服务链”吗?你的想法很好,但不能用这种幼稚的方法来实现 您试图实现的是位置透明性,同时保持系统的响应性,这不是一项容易的任务 AKKA想到,有很多大的框架可以解决这个问题 如果您的目标只是分离关注点(每个服务处理的都是问题的一部分,并调用其他服务来获得它所需要的),那么您可以只使用相关的类,而无需从服务器向自身发出http请求 相反,如果您希望能够跨多个节点分发服务,您应该依赖于akka之类的框架,那么自己完成这项任务是不可行的