要用多个线程(试验用了2个),
从一个队列里按照消息的不同属性(也就是用selector)取出消息进行处理。
可是每次执行程序取消息的时候,
从activemq的控制台里看,都会看到有很多消息进入了DLQ队列。
如下图:
所有理由差不多都是这样的
这样就有很多消息没有被那2个线程取到,
也就“丢”了很多消息
请问是因为我有多个线程从1个队列里取数据导致的消息进入DLQ吗?
还是别的,比如activemq的配置等问题引起的呢?
这是我actvemq.xml里的部分内容
transportConnectors:
2个线程都是从一个ActiveMQConnectionFactory实例里取得的connection对象。
请大神指教啊
谢谢了
6 个解决方案
#1
顶下,在线等啊~~
#2
再顶
另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?
我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收
发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。
求指教
求顶
求
另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?
我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收
发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。
求指教
求顶
求
#3
看错误信息 是超过了重发送次数
amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列
需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答
amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列
需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答
#4
多谢回复。
你说的还有网上说导致死锁的3个原因,貌似我程序里都没有
我生成session用的是这句话:
conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
关闭session也是在发送完以后在调用的session的commit和close方法
总之非常奇怪。
你说的重复发送是amq的配置(activemq.xml)里设置的吗?这个重发有什么意义呢?
发送到amq里不就可以了,为啥还要重发?
你说的还有网上说导致死锁的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应该是启用事物了。
如果客户端没有确认收到消息 就会重发啊。
改成false true应该是启用事物了。
如果客户端没有确认收到消息 就会重发啊。
#6
qq 7689791
#1
顶下,在线等啊~~
#2
再顶
另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?
我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收
发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。
求指教
求顶
求
另外,我放慢了发送端发送频率,就没有消息进入dlq了,
难道是发送端发送过于频繁有关?
我是2台电脑,分别用两个activemq,
用networkConnector打通,然后一个发一个收
发送也是2个线程,
1个5秒发一次,一个7秒发一次,都是向一个队列里发送。
求指教
求顶
求
#3
看错误信息 是超过了重发送次数
amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列
需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答
amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列
需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答
#4
多谢回复。
你说的还有网上说导致死锁的3个原因,貌似我程序里都没有
我生成session用的是这句话:
conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
关闭session也是在发送完以后在调用的session的commit和close方法
总之非常奇怪。
你说的重复发送是amq的配置(activemq.xml)里设置的吗?这个重发有什么意义呢?
发送到amq里不就可以了,为啥还要重发?
你说的还有网上说导致死锁的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应该是启用事物了。
如果客户端没有确认收到消息 就会重发啊。
改成false true应该是启用事物了。
如果客户端没有确认收到消息 就会重发啊。
#6
qq 7689791