How to rollback messages in Activemq

I want to send confirmation to Activemq when the value of x is 1 . If it is not 1 , I want to forward messages to Activemq . Then only Activemq again sends these messages to subscribers. For this, I wrote the following programs.

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(); } } 

This is the right way to do this. Can you suggest me if there is an effective way.

Thanks.

+1
source share
1 answer

Ideally, you would have:

Create an ActiveMQConnectionFactory to your binding address, Create a RedeliveryPolicy and set it to ActiveMQConnectionFactory . Create a Session and use session.commit () if true and session.rollback () if it failed.

These two links can help you:

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) { .... } }; .... } 

}

+2
source

Source: https://habr.com/ru/post/904160/


All Articles