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时特殊处理

posted @ 2019-11-19 22:23  Draymond  阅读(349)  评论(0编辑  收藏  举报