博客
关于我
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");    }}

效果显示:

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

你可能感兴趣的文章
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>