博客
关于我
Spirng集成ActiveMQ
阅读量:548 次
发布时间:2019-03-09

本文共 7952 字,大约阅读时间需要 26 分钟。

使用Spirng集成ActiveMQ:

1.ConnectionFactory:用于管理连接的连接工厂

2.JmsTemplate:用于发送和接受消息的模板类

3.MessageListener:消息监听器

ConnectionFactory:

1.一个Spring提供的连接池

2.JmsTemplate每次发消息都会重新创建连接,会话和productor

3.Spring中提供了SingleConnectionFactory和CachingConnectionFactory

JmsTemplate:

1.由Spring提供,只需要向Spring容器注册这个类就能使用JmsTemplate方便的操作jms

MessageListerner:

1.实现一个onMessage方法,该方法只接受一个Message参数。

队列模式

1.首先导入jar包,这里我用的是maven

org.apache.activemq
activemq-all
5.7.0
org.apache.activemq
activemq-core
5.7.0
org.springframework
spring-jms
4.2.5.RELEASE
org.apache.activemq
activemq-pool
5.7.0
org.springframework
spring-context
4.2.5.RELEASE
org.springframework
spring-test
4.2.5.RELEASE
test
org.springframework
spring-test
5.0.6.RELEASE
compile

Spring与AMQ的配置文件:

1.因为有重合部分所以单独做了一个Commen配置:(spring-amq-commen.xml)

tcp://192.168.1.6:61616

2.发送者:(spring-amq-producer.xml)

3.接受者:(spring-amq-consumer.xml)

因为有用到JmsTemplate所以先定义一个接口:

package com.zzf.spring.jms.service;public interface ProducerServic {    public void sendMsg(String message);}

实现类:

package com.zzf.spring.jms.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.jms.*;@Servicepublic class ProducerServiceImpl implements ProducerServic {    @Autowired    JmsTemplate jmsTemplate;    @Resource(name = "destinationQueue")    Destination destination;    public void sendMsg(final String message) {        //使用JmsTemplate发送消息        jmsTemplate.send(destination, new MessageCreator() {          //创建一个消息            public Message createMessage(Session session) throws JMSException {                TextMessage textMessage = session.createTextMessage(message);                return textMessage;            }        });        System.out.println("发送消息"+message);    }}

启动类(生产者):

package com.zzf.spring.jms.service;import org.springframework.context.support.ClassPathXmlApplicationContext;class AppProducer {    public static void main(String[] args) {        //读取配置文件        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-amq-producer.xml");        //ProducerServic producerServic= context.getBean(ProducerServic.class);//通过获取class的方式获取bean        ProducerServic producerServic= (ProducerServic) context.getBean("producerServiceImpl");        for (int i = 0; i < 10; i++) {            producerServic.sendMsg("Spring-test="+i);        }        context.close();    }}

启动后可以看到:

消费者需要实现MessageListerner做消息监听器:

package com.zzf.spring.jms.service;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;public class MyMessageListener implements MessageListener {    public void onMessage(Message msg) {        if (msg instanceof TextMessage) {            try {                TextMessage txtMsg = (TextMessage) msg;                String message = txtMsg.getText();                System.out.println("消息内容: " + message);            } catch (JMSException e) {                throw new RuntimeException(e);            }        } else {            throw new IllegalArgumentException("Message must be of type TextMessage");        }    }}

启动类:

package com.zzf.spring.jms.service;import org.springframework.context.support.ClassPathXmlApplicationContext;public class AppConsumer {    public static void main(String[] args) {        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-amq-consumer.xml");    }}
启动后:

OK……Spring与AMQ的队列模式就这么能用了

主题模式

1.修改xml文件添加主题模式:commen.xml

tcp://192.168.1.6:61616

修改配置容器,增加一个topic.xml

原来的consumer.xml如下所示:

修改接口:

package com.zzf.spring.jms.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.jms.*;@Servicepublic class ProducerServiceImpl implements ProducerServic {    @Autowired    JmsTemplate jmsTemplate;    @Resource(name = "destinationQueue")    Destination destination;    @Resource(name = "destinationTopic")    Destination destinationTopic;    public void sendMsg(final String message) {        //使用JmsTemplate发送消息        jmsTemplate.send(destination, new MessageCreator() {            //创建一个消息            public Message createMessage(Session session) throws JMSException {                TextMessage textMessage = session.createTextMessage(message);                return textMessage;            }        });        System.out.println("发送消息"+message);    }    public void sendMsgTopic(final String message) {        //使用JmsTemplate发送消息        jmsTemplate.send(destinationTopic, new MessageCreator() {            //创建一个消息            public Message createMessage(Session session) throws JMSException {                TextMessage textMessage = session.createTextMessage(message);                return textMessage;            }        });        System.out.println("发送消息"+message);    }}

只需要修改Resource的name也行

发布者启动类代码:

package com.zzf.spring.jms.service;import org.springframework.context.support.ClassPathXmlApplicationContext;public class AppTopicProducer {    public static void main(String[] args) {        //读取配置文件        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-amq-producer.xml");        //ProducerServic producerServic= context.getBean(ProducerServic.class);//通过获取class的方式获取bean        ProducerServic producerServic= (ProducerServic) context.getBean("producerServiceImpl");        for (int i = 0; i < 10; i++) {            producerServic.sendMsgTopic("Spring-test="+i);        }        context.close();    }}
订阅者启动类代码:
package com.zzf.spring.jms.service;import org.springframework.context.support.ClassPathXmlApplicationContext;public class AppTopicConsumer {    public static void main(String[] args) {        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-amq-topic.xml");    }}

效果显示:

每个订阅者都收到了发布者发送的消息~

你可能感兴趣的文章
MySQL 错误
查看>>
mysql 随机数 rand使用
查看>>
MySQL 面试题汇总
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-EXPLAIN
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>