Currently JBM uses two JGroups channels:
1) A data channel for fast sending of unreliable messages across a network
2) A control channel for binding/unbinding queues, and various other "control" operations.
Up til now we haven't required the ordering guarantee for 2) to be any better than FIFO (order of messages sent from a particular node is maintained).
However, a new requirement has come up which, for a particular message only, we require each node to receive that message in the same order with respect to any view change messages on every node. Note this only applies to that message, for all other messages on the control channel they don't have to be in the same order with respect to view changes.
So... I was looking for some kind of virtual synchrony type protocol I could use with JGroups.
AFAICT JGroups supports a total ordering using a Singleton approach which should give us the ordering guarantee we need, but my worry is this might be a sledgehammer to crack a nut.
Yes, total order is an overkill in this siutuation. What I suggest is to use virtual synchrony, which you can do by adding the FLUSH protocol to your stack. An example of this is JGroups/conf/flush-udp.xml (in 2.5) or JGroups/conf/stacks.xml (the "udp" config in 2.5 as well).
I don't read this forum, so ping me when you need me to reply to your reply...