code: public <T> CompletableFuture<T> sendMessageWithFuture(Address dest, byte[] data, int offset, int length,
                                                             RequestOptions opts) throws Exception {
           return sendMessageWithFuture(dest, new Buffer(data, offset, length), opts);
       }
docs: Sends a unicast message to the target defined by msg.getDest() and returns a future
  @param dest the target to which to send the unicast message. Must not be null.
  @param data the payload to send
  @param offset the offset at which the data starts
  @param length the number of bytes to send
  @param opts the options
  @return CompletableFuture<T> A future from which the result can be fetched, or null if the call was asynchronous
  @throws Exception If there was problem sending the request, processing it at the receiver, or processing
  it at the sender. {@link java.util.concurrent.Future#get()} will throw this exception