This is the expected behavior with the current implementation of NettyTransceiver. The first request always blocks until the handshake is completed. All subsequent requests are asynchronous. There is an existing issue to improve this for Netty and other asynchronous implementations:
IIRC there is a workaround. You can call getRemote() on the NettyTransceiver (or maybe the Responder?) immediately after you create it. This will force the handshake to happen so that the first RPC will be asynchronous. However, I think calling this method results in a stack trace being logged on the server side because the server gets a request with an empty RPC name. It's harmless but just kind of annoying.
Another approach might be writing a patch to perform an asynchronous handshake, but the basic problem is that the handshake needs to be completed prior to invoking any RPC. So there has to be some mechanism to block/prevent RPCs until the handshake is completed, unless anyone can think of another way to do it.