ActiveMQ注意事项

1.消费者在消费数据的过程当中报错,那么就会自动重试
        2.如果消费者报错,会自动重试,但是数据已经真实拿到,可能会造成重复消费,幂等性问题
            思路,每一次监听到数据后,获取到消息的全局ID,每一条相同的消息,ID都是相同的

启动类添加

public static String MESSAGEID;
    //消费者消费  destination队列或者主题的名字
    @JmsListener(destination = "boot_queue")
    public void getMessage(TextMessage message,Session session) throws JMSException {
       //id相同代表同一条消息
           if(message.getJMSMessageID()==MESSAGEID){
         //手动签收
               message.acknowledge();
           }else{
               MESSAGEID=message.getJMSMessageID();
               System.out.println("消费者获取到消息:"+message.getText());
               int result=5/0;
               //处理数据的业务逻辑
               session.recover();
           }
    }

产生原因:网络延迟传输中,会造成进行MQ重试中,在重试过程中,可能会造成重复消费。

解决办法:

1.使用全局MessageID 判断消费方使用同一个,解决幂等性。

2.使用JMS可靠消息机制

原文地址:https://www.cnblogs.com/chx9832/p/12313932.html