APLO-218 has a perl test case that demonstrates a bug handling tx commits after a consumer has been unsubscribed.
Here are the effective steps his test case takes: 1) consumer subscribe to "queue" 2) consumer begin tx 3) producer.send to "queue" 4) consumer receive and ack 5) consumer unsubscribe 6) consumer commit tx After step 5, the callback to the consumer's AckHandler will fail because when the consumer closes itself after all the "release" calls are made on it (last one looks to be in the Subscription.close call), it will close its ack_handler, which sets its consumer_acks to null. When the transaction tries to call the "perform_ack" as a closure, it fails because there is an assert in perform_ack to make sure there are consumer_acks. I looked at how ActiveMQ handles this same case, but it seems the destination subscriptions and the "StompSubscriptions" are treated differently. The ProtocolHandler keeps around the StompSubscription even after a unsubscribe call, so that a transaction still sees what messages were left unacked. I could be off a little, but I think that's what I saw. Any quick suggestions?
