【发布时间】:2020-12-02 10:03:27
【问题描述】:
我正在尝试构建一个 Mulesoft 自定义连接器,该连接器向第三方系统发出 HTTP 请求,我希望这些 HTTP 请求以非阻塞方式发出,以便执行可以继续而无需等待要返回的 HTTP 响应。
Mulesoft 文档here 中有一个示例,其中显示了此示例代码:
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's custom connector documentation 状态
HttpClient 能够使用非阻塞 I/O 来发出请求。
但我不明白怎么做!
上面的示例代码从HttpClient 接口调用了一个方法send(String, String, HttpResponseCallback)。但是,HttpClient 接口(如 Mulesoft's API javadoc 中所述)没有这样的方法。
我看到HttpClient 接口确实有sendAsync(HttpRequest request) 方法,但我无法理解如何将其与示例代码一起使用。
我了解 Mulesoft 的HttpClient 是使用 Project Grizzly 的 HTTP 客户端实现的,并且支持非阻塞请求,所以我觉得这是可以做到的,我只是不明白如何......
感谢任何提示!
【问题讨论】: