gpt4 book ai didi

java - 客户端 JAX-RS 异步请求

转载 作者:行者123 更新时间:2023-12-02 01:00:28 24 4
gpt4 key购买 nike

我想实现一个异步 JAX_RS 客户端我有五个Web服务Rest,我需要同时启动这些服务,而不需要等待第一个启动的服务的响应。

这是我的客户端代码:

public static void main(String[] args) throws InterruptedException {

while (true) {
for (int i=11;i<=15;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+"........");

String state = target.path("PresenceSensor/"+id).path("getState")
.request().accept(MediaType.TEXT_PLAIN).get(String.class);
System.out.println("state Presence Sensor "+id+" = " + state);
if (state.equals("On")) {
target.path("PresenceSensor/"+id).path("change").request()
.accept(MediaType.TEXT_PLAIN).get(String.class);
} else {
System.out.println("Presence Sensor shut down, state= "
+ state);

}
}
private static URI getBaseURI(String project) {// chemin de l'application
return UriBuilder.fromUri("http://localhost:8081/"+project).build();
}
}

如何异步(同时启动 5 个传感器)?预先感谢您。

最佳答案

首先,为什么你有一段时间 true ?一旦你的循环结束,所有的工作就完成了,对吗?

您需要将每个调用放入其自己的线程中。

这是我的看法:在其线程中启动每个调用,然后等待每个响应,然后退出应用程序。

您可以使用此代码:

ExecutorService executor = Executors.newFixedThreadPool(5);

// Each call will be started here
List<Future<Integer>> futureList = new ArrayList<>();
for (int i = 11; i <= 15; i++) {
final int index = i;
Future<Integer> future = executor.submit(() -> {
// do your stuff here
return index;
});
futureList.add(future);
}

// This will wait for each call to finish
for (Future<Integer> integerFuture : futureList) {
integerFuture.get();
}

// everything's done, no need to wait indefinitely

关于java - 客户端 JAX-RS 异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com