zoukankan      html  css  js  c++  java
  • ActiveMQ常见消息类型

    本文引用于:https://www.cnblogs.com/qlqwjy/p/10463296.html

    JMS由下面三部分组成:消息头、属性、消息体。其中消息体定义了五种消息体格式,也可以称为消息类型。

      JMS规范中的消息类型包括TextMessage、MapMessage、ObjectMessage、BytesMessage、和StreamMessage等五种。ActiveMQ也有对应的实现,下面我们结合Spring JMS分别来看一下五种消息类型的收发代码。类结构如下图:

      下面结合spring研究常见的几种消息类型:

    applicationContext.xml如下:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!--配置扫描注解的包-->
        <context:component-scan base-package="cn.qlq.jms"></context:component-scan>
    
        <!--Spring为我们提供的ConnectionFactory-->
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://localhost:61616"></property>
        </bean>
    
        <!--Spring jms为我们提供的连接池-->
        <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
            <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
        </bean>
    
        <!--一个队列的目的地,构造方法指定queueName,点对点模式-->
        <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
            <constructor-arg value="queue"></constructor-arg>
        </bean>
    
        <!--spring JMS提供的JmsTemplate-->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="connectionFactory"/>
        </bean>
    
    
        <!--消费消息容器(需要注入连接工厂,目的地,消息消费者监听器)-->
        <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory"/>
            <property name="destination" ref="queueDestination"/>
            <property name="messageListener" ref="myConsumer"/>
        </bean>
    
        <!--一个队列的目的地,构造方法指定queueName,点对点模式-->
        <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg value="topic"></constructor-arg>
        </bean>
    </beans>
    复制代码

    1.最常见的  TextMessage

    复制代码
        public void sendMessage(final String message) {
            jmsTemplate.send(destination, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    TextMessage textMessage = session.createTextMessage(message);
                    return textMessage;
                }
            });
            logger.info("send textMesage:{}",message);
        }
    复制代码

     查看后台:

    2.MapMessage发送Map消息

    复制代码
        public void sendMessage(final String message) {
            jmsTemplate.send(destination, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    MapMessage mapMessage = session.createMapMessage();
                    mapMessage.setString("str",message);
                    mapMessage.setBoolean("boolean",false);
                    return mapMessage;
                }
            });
        }
    复制代码

    查看后台消息:

    3.ObjectMessage发送序列化对象消息,Object必须实现Serializable接口

    复制代码
        public void sendMessage() {
            jmsTemplate.send(destination, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    ObjectMessage objectMessage = session.createObjectMessage();
                    ArrayList<String> obj = new ArrayList();
                    obj.add("123");
                    obj.add("456");
                    objectMessage.setObject(obj);
                    return objectMessage;
                }
            });
        }
    复制代码

     查看后台消息:

     

    4.  bytesMessage 发送字节消息

    复制代码
        public void sendMessage() {
            jmsTemplate.send(destination, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    BytesMessage bytesMessage = session.createBytesMessage();
                    bytesMessage.writeBytes("str".getBytes());
                    bytesMessage.writeBoolean(false);
                    return bytesMessage;
                }
            });
        }
    复制代码

    后台:

    5.StreamMessage  发送Stream消息

    复制代码
        public void sendMessage() {
            jmsTemplate.send(destination, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    StreamMessage streamMessage = session.createStreamMessage();
                    streamMessage.writeString("str");
                    streamMessage.writeInt(100);
                    streamMessage.writeObject("obj");
                    return streamMessage;
                }
            });
        }
    复制代码

    消息的接受者:

    复制代码
        public void onMessage(Message message) {
            try{
                System.out.println(message.getClass());
    
                // TextMessage
                if (message instanceof TextMessage) {
                    TextMessage textMessage1 = (TextMessage) message;
                    System.out.println(textMessage1.getText());
                }
    
                // MapMessage
                if (message instanceof MapMessage) {
                    MapMessage mapMessage = (MapMessage) message;
                    System.out.println(mapMessage.toString());
                }
    
                // ObjectMessage
                if (message instanceof ObjectMessage) {
                    ObjectMessage objectMessage = (ObjectMessage) message;
                    System.out.println(objectMessage.toString());
                }
    
                // BytesMessage
                if (message instanceof BytesMessage) {
                    byte[] b = new byte[1024];
                    int len = -1;
                    BytesMessage bm = (BytesMessage) message;
                    while ((len = bm.readBytes(b)) != -1) {
                        System.out.println(new String(b, 0, len));
                    }
                }
    
                // StreamMessage
                if (message instanceof StreamMessage) {
                    StreamMessage sm = (StreamMessage) message;
                    System.out.println(sm.readString());
                    System.out.println(sm.readInt());
                }
            }catch (Exception e){
    
            }
        }
    复制代码
  • 相关阅读:
    高效的团队必须坚持反馈制度
    项目管理式生活
    用PDCA让工作效率步步高升
    PHP函数:fsockopen简介
    php的getallheaders函数在nginx下失效的解决办法
    getallheaders函数使用方法
    PHP中getenv函数
    PHP获取http请求的头信息实现步骤
    php下获取http状态的实现代码
    PHP获取客户端和服务器端IP
  • 原文地址:https://www.cnblogs.com/fuanyu/p/15307169.html
Copyright © 2011-2022 走看看