如何只用一个客户端启动多个 web rest 服务
How to launch multiple web rest services with only one client
我有兴趣开发网络应用程序。
我需要同时调用十个 Web 服务,并且使用一个 JAX-RS 客户端。
这是我的代码:
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
launcherPS(i)
}
static void launcherPS(int id){
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
String name="LampPostZ"+id;
WebTarget target = client.target(getBaseURI(name));
System.out.println();
System.out.println("Launching of PresenceSensor "+id+" .........");
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN).get(String.class);
}
private static URI getBaseURI(String project) {
return UriBuilder.fromUri("http://localhost:8081/"+project).build();
}
}
此代码允许调用第二个服务,但第一个服务终止其操作。但是,我需要同时启动它们。
感谢您的帮助。
如果您使用的是JEE7/JAX-RS 2.0,您可以使用async()
方法:
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN)
.async()
.get(/* see Javadocs for various options! */);
一般这returns一个Future
。请参阅 JAX-RS 2.x 规范中的详细信息,第 8.4 章。
另一方面,如果你有幸使用 JEE8/JAX-RS 2.1,你可以使用新的 rx()
方法,它可以给你一个 CompletionStage
甚至更丰富的 RX 东西:
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN)
.rx() // ONLY JAX-RS 2.1
.get(/* see Javadocs for various options! */);
参见 JAX-RS 2.1 规范,第 5.7 章。
注意:如果你想对调用的结果做些什么,你需要相应地调整代码,例如编写各种 CompletionStages
以在全部完成时得到通知。
我有兴趣开发网络应用程序。 我需要同时调用十个 Web 服务,并且使用一个 JAX-RS 客户端。
这是我的代码:
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
launcherPS(i)
}
static void launcherPS(int id){
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
String name="LampPostZ"+id;
WebTarget target = client.target(getBaseURI(name));
System.out.println();
System.out.println("Launching of PresenceSensor "+id+" .........");
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN).get(String.class);
}
private static URI getBaseURI(String project) {
return UriBuilder.fromUri("http://localhost:8081/"+project).build();
}
}
此代码允许调用第二个服务,但第一个服务终止其操作。但是,我需要同时启动它们。 感谢您的帮助。
如果您使用的是JEE7/JAX-RS 2.0,您可以使用async()
方法:
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN)
.async()
.get(/* see Javadocs for various options! */);
一般这returns一个Future
。请参阅 JAX-RS 2.x 规范中的详细信息,第 8.4 章。
另一方面,如果你有幸使用 JEE8/JAX-RS 2.1,你可以使用新的 rx()
方法,它可以给你一个 CompletionStage
甚至更丰富的 RX 东西:
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN)
.rx() // ONLY JAX-RS 2.1
.get(/* see Javadocs for various options! */);
参见 JAX-RS 2.1 规范,第 5.7 章。
注意:如果你想对调用的结果做些什么,你需要相应地调整代码,例如编写各种 CompletionStages
以在全部完成时得到通知。