This is some of what we do:
Each mux is associated with a channel adaptor. So if I have 5 outbound connections I will have mux1 to mux5
Have a qbean for each mux that runs at specific time intervals to do your network messages (use the mux to send/receive). This makes sure each of your channels are doing the logon/echo/network messages, which prevents remote from disconnecting your channels.
Based on the responses or no responses you can set the state (allow transactions or not) for a channel. Use a space variable which is shared on the VM to manage if transactions are allowed or not. This gets tricky if you have multiple machines, in that case find some means to share values via remote spaces/db/memcache whatever works for you. We use the db.
Now you will need to extend the muxpool and override the isConnected method to incorporate the usage of the additional state of the channel, so you can decide if traffic on a channel can be sent or not (we havent done this part but it seems logical :))
For normal round robin processing, configure a muxpool with all the muxes in it. This will make sure the financial requests (not network)
are sent in a round robin fashion (mux pool takes care of that or uses the strategy that you configure).
The reason we chose this approach
Others on the list can feel free to correct or improve what I have stated.
-chhil