簡體   English   中英

如何在 Mulesoft 4 自定義連接器中使用非阻塞 HTTP 請求

[英]How to use non-blocking HTTP requests in Mulesoft 4 Custom Connector

我正在嘗試構建一個 Mulesoft 自定義連接器,該連接器向第三方系統發出 HTTP 請求,我希望以非阻塞方式發出這些 HTTP 請求,以便執行可以繼續執行而無需等待 Z293C9EA246FFF9989ADC6 的響應被退回。

此處的 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 能夠使用非阻塞 I/O 來發出請求。

但我不明白怎么做!

上面的示例代碼從HttpClient接口調用方法send(String, String, HttpResponseCallback) 但是, Mulesoft 的 API javadoc中記錄的HttpClient接口沒有這樣的方法。

我看到HttpClient接口確實具有sendAsync(HttpRequest request)方法,但我無法理解如何將其與示例代碼一起使用。

我了解 Mulesoft 的HttpClient是使用 Project Grizzly 的 HTTP 客戶端實現的,並且支持非阻塞請求,所以我覺得這是可以做到的,我只是不明白如何......

感謝您的任何提示!

嗨,我試圖用相同 的非阻塞操作文檔來實現同樣的事情,但我做不到,所以我嘗試基於Slack 連接器,那里有很多示例,他們使用其他代碼來實現異步調用具有 CompletionCallback 的 ChannelOperations

但是,這對我不起作用,我想也許我必須在服務器端進行另一種解決方法才能實現異步調用。 無論如何,最后,我使用 CompletableFuture 在其他線程中運行請求,請求是同步方式但在 CompletableFuture.runAsync 中執行異步

 public void request(String url, @Connection HttpClient client, @Content String body) { HttpResponse response = null; HttpEntity entity = new ByteArrayHttpEntity(body.toString().getBytes()); HttpRequest httpRequest = HttpRequest.builder().uri(url).addHeader("Content-Type", "application/json").method("POST").entity(entity).build(); CompletableFuture.runAsync(() -> { try { client.start(); response = client.send(httpRequest, 30000, true, null); } catch (IOException | TimeoutException e) { LOGGER.error(response.toString()); } LOGGER.info(response.toString()); client.stop(); LOGGER.info("Finish"); }); }

有一個類似於DMI的 Mule 連接器,其中調用是異步的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM