A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 longxf_sjz 于 2019-8-11 09:56 编辑

1.        JMS 和activeMQ 关系
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。
2.       使用场景
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,从而节省请求响应时间并能对程序间进行解耦。
3.       ActiveMQ下载与安装
(1)        官方网站下载:http://activemq.apache.org/
(2)        安装(Linux)解压此文件 tar  zxvf  apache-activemq-5.12.0-bin.tar.gz
(3)        启动./activemq start
(4)        假设服务器地址为192.168.25.135 ,打开浏览器输入地址 http://192.168.25.135:8161/ 即可进入ActiveMQ管理页面
4.       JMS消息传递类型
一种是点对点的,即一个生产者和一个消费者一一对应
另一种是发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
5.       JMS消息数据类型
    · TextMessage--一个字符串对象
    · MapMessage--一套名称-值对
    · ObjectMessage--一个序列化的 Java 对象
    · BytesMessage--一个字节的数据流
    · StreamMessage -- Java 原始值的数据流
6.       Spring整合JMS
6.1点对点模式
6.1.1消息生产者
创建maven工程,添加SpringJms 、activeMQ依赖
[XML] 纯文本查看 复制代码
<dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>                
        </dependency>
<dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-client</artifactId>
                <version>5.13.4</version>
        </dependency>
创建spring配置文件
[XML] 纯文本查看 复制代码
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
            <property name="brokerURL" value="tcp://192.168.25.135:61616"/>  
        </bean>
           
    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  
        <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  
        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  
            <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  
        </bean>  
                   
    <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
            <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  
            <property name="connectionFactory" ref="connectionFactory"/>  
        </bean>      
    <!--这个是队列目的地,点对点的  文本信息-->  
        <bean id="smsDestination" class="org.apache.activemq.command.ActiveMQQueue">  
            <constructor-arg value="sms"/>  
        </bean>   
6.1.2 消息生产者自定义类发送消息
[Java] 纯文本查看 复制代码
@Component
public class QueueProducer {
        
        @Autowired
        private JmsTemplate jmsTemplate;
        
        @Autowired
        private Destination queueTextDestination;
        
        /**
         * 发送文本消息
         * @param text
         */
        public void sendTextMessage(final String text){
                jmsTemplate.send(queueTextDestination, new MessageCreator() {                        
                        public Message createMessage(Session session) throws JMSException {
                                return session.createTextMessage(text);
                        }
                });                
        }
}
6.1.3消息消费者
创建maven工程,添加SpringJms 、activeMQ依赖(同上)
创建spring配置文件
[XML] 纯文本查看 复制代码
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
            <property name="brokerURL" value="tcp://192.168.25.135:61616"/>  
        </bean>           
    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  
        <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  
        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  
            <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  
        </bean>          
    <!--这个是队列目的地,点对点的  文本信息-->  
        <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">  
            <constructor-arg value="sms"/>  
        </bean>    
        <!-- 我的监听类 -->
        <bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>
        <!-- 消息监听容器 -->
        <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                <property name="connectionFactory" ref="connectionFactory" />
                <property name="destination" ref="queueTextDestination" />
                <property name="messageListener" ref="myMessageListener" />
        </bean>        
6.1.3        消息消费方自定义监听类
[Java] 纯文本查看 复制代码
public class MyMessageListener implements MessageListener {
        public void onMessage(Message message) {
        TextMessage textMessage=(TextMessage)message;                
                try {
                        System.out.println("接收到消息:"+textMessage.getText());
                } catch (JMSException e) {
                        e.printStackTrace();
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马