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可靠消息机制

  • 相关阅读:
    [ Virtuoso ] 增加自定义 Layer 需要做哪些事?
    [ ENV ] 记录一些自己比较喜欢的初始化语句
    [ SVRF ] 学习笔记
    [ Skill ] 键位不够用之 右键 Menu
    ubuntu创建桌面快捷方式
    git常用命令
    架设Git服务器
    Linux下安装redis
    mysql查询语句
    mysql数据库基本操作
  • 原文地址:https://www.cnblogs.com/chx9832/p/12313932.html
Copyright © 2011-2022 走看看