The exchange processing in the EventDrivenPollingConsumer can lose exchanges when the internal queue is bounded and full.
The reason is that BlockingQueue.offer(...) is non-blocking and returns a boolean which indicates whether the element was added.
However, the return value is ignored causing the exchange to get lost if it could not be added.
A potential workaround is to use an unbounded BlockingQueue (e.g. LinkedBlockingQueue).