Как использовать неблокирующие 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, где вызовы выполняются асинхронно.

Другие вопросы по тегам