ActiveMQ有一个重投策略,比如我设置初始1000毫秒(1秒),乘数为2,使用多线程spring监听消费,如果消费过程中抛出异常,则当前对象重投进activeMQ队列内,呈现间隔0秒、1秒、2秒、4秒、8秒、16秒......以此类推的形态进行重投直至达到设定的最大次数则将信息投入死信队列。
但经过实践证明,线程在此过程中是独占形式的,也就是说如果队列中有两个消息,我单独开一个线程消费的话是先消费一个(包含重投),直至消费成功或者达到次数上限进入死信队列,这个线程才会去消费下一个,也就是说在一个对象的消费时,线程是被这个对象独占的,如何能够实现在第一个消费间隔期间线程去消费第二个对象呢?我想让线程并行处理而不是串行处理。请教各位!!!
自己换了一种思路解决了:
1、仍然采用死信队列的模式,但是改变为正常队列消费一次失败即丢入死信队列。
2、在死信队列的消费端实现延时队列,自定义延时次数和时长。
这样就可以解决重投的不释放问题。