Я использую объект WebClient
для отправки запроса Http Post на сервер.
Он отправляет огромное количество запросов довольно быстро (в QueueChannel
около 4000 сообщений). Проблема ... кажется, что сервер не может ответить достаточно быстро ... поэтому я получаю много ошибок 500 сервера и преждевременное закрытие соединения.
Есть ли способ ограничить количество запросов в секунду? Или ограничить количество потоков, которые он использует?
РЕДАКТИРОВАТЬ:
Сообщение обработки конечной точки сообщения в QueueChannel:
@MessageEndpoint
public class CustomServiceActivator {
private static final Logger logger = LogManager.getLogger();
@Autowired
IHttpService httpService;
@ServiceActivator(
inputChannel = "outputFilterChannel",
outputChannel = "outputHttpServiceChannel",
poller = @Poller( fixedDelay = "1000" )
)
public void processMessage(Data data) {
httpService.push(data);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Класс обслуживания WebClient:
@Service
public class HttpService implements IHttpService {
private static final String URL = "http://www.blabla.com/log";
private static final Logger logger = LogManager.getLogger();
@Autowired
WebClient webClient;
@Override
public void push(Data data) {
String body = constructString(data);
Mono<ResponseEntity<Response>> res = webClient.post()
.uri(URL + getLogType(data))
.contentLength(body.length())
.contentType(MediaType.APPLICATION_JSON)
.syncBody(body)
.exchange()
.flatMap(response -> response.toEntity(Response.class));
res.subscribe(new Consumer<ResponseEntity<Response>>() { ... });
}
}