如何在Activemq中回滚消息

我想在变量x值等于1时向Activemq发送确认。如果它不等于1 ,我想将消息重新发送到Activemq 。 然后只有Activemq再次向订阅者传递消息。为此,我编写了以下程序。

MessageConsumer.java:

  public class Consumer extends HttpServlet { @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { try { ActiveMQConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61617"); RedeliveryPolicy policy = new RedeliveryPolicy(); policy.setInitialRedeliveryDelay(1000L); policy.setMaximumRedeliveries(RedeliveryPolicy.NO_MAXIMUM_REDELIVERIES); connectionFactory.setRedeliveryPolicy(policy); connectionFactory.setUseRetroactiveConsumer(true); Connection connection=connectionFactory.createConnection(); final Session session=connection.createSession(true, Session.AUTO_ACKNOWLEDGE); Topic queue=session.createTopic("MessageTesting"); javax.jms.MessageConsumer consumer=session.createConsumer(queue); //anonymous class MessageListener listener = new MessageListener() { @Override public void onMessage(Message msg) { TextMessage msg1=(TextMessage)msg; try { String messageBody=msg1.getText(); if (x==1) { //Process was completely done,so I am sending acknowledge session.commit(); } else { //Process is not done sucessfully, So I want to redeliver messages, For this session.rollback(); } } catch (Exception e) { e.printStackTrace(); } } }; consumer.setMessageListener(listener); connection.start(); } } 

这是正确的方法。你建议我,有没有有效的方法。

谢谢。

理想情况下,您必须:

为绑定地址创建一个ActiveMQConnectionFactory ,创建一个RedeliveryPolicy并将其设置为ActiveMQConnectionFactory 。 创建一个会话并使用session.commit()(如果为true)和session.rollback()(如果失败)。

这两个链接可能对您有所帮助:

http://activemq.apache.org/message-redelivery-and-dlq-handling.html

http://activemq.apache.org/redelivery-policy.html

 public class Consumer extends HttpServlet { @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { try { ... MessageListener listener = new MessageListener() { public void onMessage(Message msg) { .... } }; .... } 

}