在Spring Boot中,可以使用多种方式发送并发的HTTP请求。以下是一种常见的方法:
下面是一个示例代码:
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.concurrent.CompletableFuture;
@Service
public class HttpService {
private RestTemplate restTemplate;
public HttpService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Async
public CompletableFuture<String> sendHttpRequest(String url) {
String response = restTemplate.getForObject(url, String.class);
return CompletableFuture.completedFuture(response);
}
}
在上面的示例中,我们创建了一个HttpService类,其中的sendHttpRequest方法使用了@Async注解,表示该方法是异步执行的。在方法内部,我们使用RestTemplate发送HTTP请求,并将响应结果封装在CompletableFuture中返回。
在使用该方法时,可以创建多个CompletableFuture对象,并使用CompletableFuture.allOf方法来等待所有请求完成。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@RestController
public class MyController {
@Autowired
private HttpService httpService;
@GetMapping("/concurrent-requests")
public String sendConcurrentRequests() throws ExecutionException, InterruptedException {
CompletableFuture<String> request1 = httpService.sendHttpRequest("http://example.com/api/1");
CompletableFuture<String> request2 = httpService.sendHttpRequest("http://example.com/api/2");
CompletableFuture<String> request3 = httpService.sendHttpRequest("http://example.com/api/3");
CompletableFuture.allOf(request1, request2, request3).join();
String response1 = request1.get();
String response2 = request2.get();
String response3 = request3.get();
// 处理响应结果
// ...
return "Concurrent requests completed";
}
}
在上面的示例中,我们在MyController类中注入了HttpService,并在sendConcurrentRequests方法中创建了三个CompletableFuture对象,分别发送三个并发的HTTP请求。然后使用CompletableFuture.allOf方法等待所有请求完成,并通过CompletableFuture.get方法获取响应结果。
这样,我们就可以在Spring Boot中实现从阵列发送并发HTTP请求的功能。在实际应用中,可以根据具体需求进行适当的调整和优化。
领取专属 10元无门槛券
手把手带您无忧上云