Как использовать неблокирующие HTTP-запросы в настраиваемом коннекторе Mulesoft 4
Я пытаюсь создать настраиваемый соединитель Mulesoft, который отправляет HTTP-запросы к сторонней системе, и я бы хотел, чтобы эти HTTP-запросы выполнялись неблокирующим образом, чтобы выполнение могло продолжаться без ожидания ответа HTTP на быть возвращенным.
Существует пример этого в документации Mulesoft здесь, который показывает этот пример кода:
public void request(String url, @Connection HttpClient client, @Content String body,
CompletionCallback<InputStream, HttpAttributes> callback ) {
client.send(url, body, new HttpResponseCallback() {
void onResponse(HttpResponse response) {
callback.success(Result.<InputStream, HttpAttributes>builder()
.output(response.getBody())
.attributes(toAttributes(response))
.build());
}
void onError(Exception e) {
callback.error(e);
}
});
}
В нем также указано, что может быть обеспечено неблокирующее поведение.
с помощью HttpClient, который поддерживает асинхронные ответы
В документации по пользовательскому соединителю Mulesoft указано
HttpClient может использовать неблокирующий ввод-вывод для выполнения запросов.
но я не понимаю как!
В приведенном выше примере кода вызывается метод
send(String, String, HttpResponseCallback)
из
HttpClient
интерфейс. Тем не менее
HttpClient
интерфейс, как описано в документации API Mulesoft, такого метода не имеет.
Я вижу что
HttpClient
интерфейс действительно имеет
sendAsync(HttpRequest request)
методы, но я не понимаю, как это можно использовать в примере кода.
Я понимаю, что Mulesoft
HttpClient
реализован с использованием HTTP-клиента Project Grizzly и поддерживает неблокирующие запросы, поэтому я чувствую, что это возможно, я просто не понимаю, как...
Спасибо за любые советы!
1 ответ
Привет, пытался добиться того же, с той же документацией по неблокирующим операциям , но я не смог. Поэтому я пробую использовать коннектор Slack , у него много примеров, и они используют другой код для достижения async вызывает ChannelOperations с CompletionCallback
Однако это не сработало для меня, я думаю, что, возможно, мне придется найти другой обходной путь на стороне сервера для достижения асинхронных вызовов. В любом случае, в конце концов, я использую CompletableFuture для запуска запроса в другом потоке, запрос синхронизируется, но выполняется Async в CompletableFuture.runAsync
Есть коннектор Mule, похожий на DMI, где вызовы выполняются асинхронно.