Currently, the HttpClientEngine supports blocking and non-blocking responses. The latter is done via `CompletableFuture`. One implementation of this is `ReactorNettyHttpClientEngine`. This coupled with the `MonoRxInvoker` allows our customers to write things like this:
in order to achieve non-blocking HTTP client calls. The `MonoRxInvoker` implementation converts a `CompletionStage` to a `Mono`. This works well; however, there are some other reactor-features that we can leverage if the engine returned a `Publisher`. They include:
- The ability for a `Mono#timeout` set on the response to aggressively terminate the HTTP request.
- The ability to pass a (reactor) context from client calls into reactor-based HttpClientEngines.
- Some `CompletionStage` threading issues are avoided. This affects us because we have some unfortunate usage of `ThreadLocal` which are very difficult to remove.