This cancels minor quality regression introduced earlier in D13604.
- For websocket, we store the channel in the WebsocketSession struct and reuse it unless it's broken
- However for gRPC, after opted out of channel pool, a new short-lived channel is created for every single call, which is against what RabbitMQ recommends.
Created a simple wrapper that lazily-initializes the channel upon first use, and creates a new one only if the previous was closed.
Depends on D13611