with failover transport. multiple non persistent producers and consumers on a single queue and transport disconnects, it is possible for a messages to get dispatched to a removed subscription or consumer. These messages are locked and hence cannot get dispatched to new consumers when the network ins reconnected. From a consumer perspective it looks like there are missing messages.
The problem occurs is messages are being dispatched while subscription removal occurring. The list of consumers is modified, inflight messages are removed from the subscription, unlocked and re dispatched. However, dispatch of messages is not synchronised with this removal and it is possible to dispatch to a removed consumer. Any such messages will be locked and never re dispatched.
removing a subscription needs to be synchronized with the use of subscriptions. This seems to be the intended use of dispatchLock but up till now dispatch() does not lock dispatchLock.