请教activemq应用中消息进入DLQ的问题

时间:2021-05-05 09:51:22
我有个程序,
要用多个线程(试验用了2个),
从一个队列里按照消息的不同属性(也就是用selector)取出消息进行处理。

可是每次执行程序取消息的时候,
从activemq的控制台里看,都会看到有很多消息进入了DLQ队列。
如下图:
请教activemq应用中消息进入DLQ的问题
所有理由差不多都是这样的
请教activemq应用中消息进入DLQ的问题

这样就有很多消息没有被那2个线程取到,
也就“丢”了很多消息

请问是因为我有多个线程从1个队列里取数据导致的消息进入DLQ吗?
还是别的,比如activemq的配置等问题引起的呢?

这是我actvemq.xml里的部分内容
请教activemq应用中消息进入DLQ的问题

transportConnectors:
请教activemq应用中消息进入DLQ的问题

2个线程都是从一个ActiveMQConnectionFactory实例里取得的connection对象。

请大神指教啊
谢谢了

6 个解决方案

#1


顶下,在线等啊~~

#2


再顶

另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?

我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收

发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。

求指教
求顶

#3


看错误信息 是超过了重发送次数

amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列

需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答

#4


多谢回复。

你说的还有网上说导致死锁的3个原因,貌似我程序里都没有
我生成session用的是这句话:
conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

关闭session也是在发送完以后在调用的session的commit和close方法

总之非常奇怪。

你说的重复发送是amq的配置(activemq.xml)里设置的吗?这个重发有什么意义呢?
发送到amq里不就可以了,为啥还要重发?

#5


conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

改成false true应该是启用事物了。

如果客户端没有确认收到消息 就会重发啊。

#6


qq 7689791

#1


顶下,在线等啊~~

#2


再顶

另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?

我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收

发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。

求指教
求顶

#3


看错误信息 是超过了重发送次数

amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列

需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答

#4


多谢回复。

你说的还有网上说导致死锁的3个原因,貌似我程序里都没有
我生成session用的是这句话:
conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

关闭session也是在发送完以后在调用的session的commit和close方法

总之非常奇怪。

你说的重复发送是amq的配置(activemq.xml)里设置的吗?这个重发有什么意义呢?
发送到amq里不就可以了,为啥还要重发?

#5


conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

改成false true应该是启用事物了。

如果客户端没有确认收到消息 就会重发啊。

#6


qq 7689791