zoukankan      html  css  js  c++  java
  • 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可靠消息机制

  • 相关阅读:
    C#成员设计建议
    基于任务的异步编程模式(TAP)的错误处理
    基于任务的异步编程模式(TAP)
    C#克隆
    C#操作excel打印
    父元素如何围住浮动子元素
    intellij idea创建第一个动态web项目
    Idea快捷键
    Python中列表的copy方法
    C++读取数量不定的数据
  • 原文地址:https://www.cnblogs.com/chx9832/p/12313932.html
Copyright © 2011-2022 走看看