JMS和ActiveMQ总结(上)

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] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
9
<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] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<!-- 真正可以产生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] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
@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] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 真正可以产生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] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
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();
                }
        }
}
发布了667 篇原创文章 · 获赞 6 · 访问量 9030

猜你喜欢

转载自blog.csdn.net/heima201907/article/details/104395495