Consider the following situation: I find out that the DefaultReactiveElasticsearchClient does not send some parameter because the default converter from RequestConverters does not put it to the produced Request. In my case, the request was 'index' and the parameter was 'if_seq_no'.
I subclass the DefaultReactiveElasticsearchClient and override the index() method. But it turns out that I need to call sendRequest() method which is private. As I result, I have to borrow some 100 lines of code from DefaultReactiveElasticsearchClient. Later, I will have to support those ~100 lines, look, what changed with each release, and so on.
My suggestion is to make the sendRequest() method protected and final (to follow the Open/Closed principle). I'm not sure whether it's the best way to go. This can probably be a starting point for a discussion.
I'm going to create a pool request soon.