zoukankan      html  css  js  c++  java
  • JMS组成结构与特点

     4:JMS组成结构与特点(四大元素)
            4.1:JMS provider   实现JMS接口和规范的消息中间件,也就是MQ服务器(安装的MQ软件)
            4.2:JMS producer   消息生产者,创建以及发送消息的客户端应用
            4.3:JMS consumer   消息消费者,接收与处理消息的客户端
            4.4:JMS message
                4.4.1:消息头
                    4.4.1.1:JMSDestination      //目的地
                    4.4.1.2:JMSDeliveryMode     //持久化:持久化的模式保证了消息可靠性 persistent 持久 non_persistent 非持久 redis:rdb aof
                    4.4.1.3:JMSExpiration       //过期时间:默认永不过期
                    4.4.1.4:JMSPririty          //优先级(0-9 越大越优先,非绝对)
                    4.4.1.5:JMSMessageID        //消息生成的唯一标识,也可以自己定义(分布式项目可以使用分布式id生成器)
    
                4.4.2:消息体
                    4.4.2.1:TextMessage 常用
                    4.4.2.2:MapMessage  常用
                    4.4.2.3:BytesMessage
                    4.4.2.4:StreamMesage
                    4.4.2.5:ObjectMessage
    
    
                4.4.3:消息属性(对消息体的进一步区分)
                    4.4.3.1:如果需要除消息头字段以外的值,那么可以使用消息属性
                    4.4.3.2:识别/去重/重点标注等操作非常有用的方法(找属性值为vip的) message.send()之前,对消息设置属性

     消息头

      @Test
        public void queueProduce() throws JMSException {
            ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(userName, password, url);
            Connection connection = factory.createConnection();
            connection.start();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Destination queue = session.createQueue(queueName);     //消息头 目的地
            MessageProducer producer = session.createProducer(queue);
    
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);      //消息头 持久化   PERSISTENT持久化 NON_PERSISTENT非持久化(mq挂了后消息会丢失)
            producer.setPriority(9);                                //消息头 权重     越大越先执行(5-9加急 0-4普通;5加急的要比普通的先执行)
    
            for (int i = 1; i <= 10; i++) {
                String msg = "第" + i + "个msg";
                TextMessage message = session.createTextMessage(msg);
                message.setStringProperty("source", "dingding");
                message.setJMSExpiration(1000 * 60 * 60 * 24L);         //消息头 过期时间 默认永不过期(0)
                message.setJMSMessageID("111111");                      //消息头 消息id 可以解决消息消费的幂等性
                producer.send(message);
            }
        }

    消息体

              TextMessage 常用
                    MapMessage  常用
                    BytesMessage
                    StreamMesage
                    ObjectMessage

    消息属性

     

    生产者业务判断,进一步标记消息;比如:用户为vip,需要特殊处理,可以使用 setStringProperty("idVip","y"); 在消费端,判断此属性为y时特殊处理

  • 相关阅读:
    浅谈 java 比较器
    浅谈lambda表达式
    使用DateLocaleConverter和SimpleDateFormat实现字符串转换成日期
    myeclipse中运行tomcat报错java.lang.NoClassDefFoundError
    《谁说菜鸟不会数据分析》读书笔记(1)
    撰写报告要点
    分析报告_问题界定篇
    数据分析报告
    kaggle入门之Titanic生存预测
    pandas基础
  • 原文地址:https://www.cnblogs.com/draymond/p/11892944.html
Copyright © 2011-2022 走看看