因为您使用
this.session =connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);
呼叫
message.acknowledge();与呼叫相同
session.acknowledge();。
为了使ActiveMQ重新交付成功与您的配置一起使用,有一些可能需要最小的更改:
- 打电话
QueueReceiver.this.session.recover();
代替打电话QueueReceiver.this.session.rollback();
void org.apache.activemq.ActiveMQSession.recover()引发JMSException
在此会话中停止消息传递,并使用最早的未确认消息重新启动消息传递。
所有使用者均按串行顺序传递消息。确认收到的消息会自动确认已传递给客户端的所有消息。
重新启动会话会导致它采取以下 *** 作:•停止消息传递•将所有可能已传递但未被确认为“已重新传递”的消息标记为•重新启动传递顺序,包括之前已传递的所有未确认的消息。重新传递的消息不必完全按照其原始传递顺序传递。
使用
this.session = connection.createSession(false, org.apache.activemq.ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE);
和呼叫((org.apache.activemq.command.ActiveMQMessage) message ).acknowledge();
,请注意,不是调用这个方法就像是一个回退,意味着消息不承认,并扔在一个异常onMessage
方法调用QueueReceiver.this.consumer.rollback();
的 org.apache.activemq.ActiveMQMessageConsumer.rollback() 。只需调用
QueueReceiver.this.consumer.rollback();
org.apache.activemq.ActiveMQMessageConsumer.rollback() 代替调用QueueReceiver.this.session.rollback();
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)