Description
When a consumer is closed and it's session is transacted it registers a synchronization on the Session TransactionContext to complete the close after the transaction has been committed or rolled back. The synchronization can be added multiple times is close is called in succession but the synchronization doesn't check if the consumer has been closed when invoked so the transaction completion can result in several attempts to remove the same consumer.