文档章节

消息中间件(2)-ActiveMq & Spring 技术集成

haoran_10
 haoran_10
发布于 2016/07/15 16:38
字数 564
阅读 165
收藏 0
  • 一、为什么需要spring + activeMq 集成?

1、原生的JMS使用起来,太繁琐,需要封装很多层才能在正式代码中使用,

2、activemq一套开源的JMS实现方案,实现了服务端和客户端,开箱即用

3、spring一整套组件,直接拿来主义

 

  • 二、实现步骤

1、开启activemq服务端

直接从官网下载 http://activemq.apache.org/,开箱即用的东西,略过。

 

2、客户端调用所需要的关键jar包,使用的maven管理,其他包管理类似

 

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jms</artifactId>
	<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.apache.activemq</groupId>
	<artifactId>activemq-core</artifactId>
	<version>5.7.0</version>
</dependency>
<dependency>
	<groupId>org.apache.activemq</groupId>
	<artifactId>activemq-pool</artifactId>
	<version>5.7.0</version>
</dependency>

 

 

实际使用的时候,可以适当调整版本号

 

3、在JMS规范 中,使用JMS几个步骤,

   (1)、用JNDI 得到ConnectionFactory对象;

    (2)、用JNDI 得到目标队列或主题对象,即Destination对象;

    (3)、用ConnectionFactory创建Connection 对象;

    (4)、用Connection对象创建一个或多个JMS Session;

    (5)、用Session 和Destination 创建MessageProducer和MessageConsumer;

    (6)、通知Connection 开始传递消息。

而activemq使用的步骤也是大同小异

 

   3.1、建立ConnectionFactory以及spring高度封装的JmsTemplate

     

@Bean
public PooledConnectionFactory PooledConnectionFactory(){
	ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
	connectionFactory.setBrokerURL(MQ_URL);//配置MQ_URL,例如tcp://localhost:61616
	
	PooledConnectionFactory PooledConnectionFactory = new PooledConnectionFactory();
	PooledConnectionFactory.setConnectionFactory(connectionFactory);
	
	return PooledConnectionFactory;
}

@Bean
public JmsTemplate JmsTemplate(){
	JmsTemplate JmsTemplate = new JmsTemplate();
	JmsTemplate.setConnectionFactory(PooledConnectionFactory());
	
	return JmsTemplate;
}

  3.2 建立Queue或者Topic

 

 

@Bean(name="queue1")
public Destination queue1Destination(){
	Destination destination = new ActiveMQQueue(queue1);//队列 定义queue1名称即可
       //Destination destination = new ActiveMQTopic(queue1);//主题
	
	return destination;
}

   

 

   第3,4步直接省略,JmsTemplate已经做好了

   3.3 发送消息

   

@Component
public class MyMessageSender {
	@Autowired JmsTemplate jmsTemplate;
	@Resource(name="queue1") Destination destination;
	
	public void send(String msg){
		jmsTemplate.send(destination, new MessageCreator() {
			@Override
			public Message createMessage(Session session) throws JMSException {
				TextMessage message = session.createTextMessage();
				message.setText(msg);
				return message;
			}
		});
	}
}

  发送消息是如此的简单,制定队列名称,就可以直接发送消息到队列或者主题

 

  3.4消息监听,有了消息发送就得有Consumer处理消息

  

@Component
public class MyMessageListener implements MessageListener{

	@Override
	public void onMessage(Message message) {
		System.out.println("==========Thread:"+Thread.currentThread().getId());
		System.out.println("==========MyMessageListener"+message.toString());
	}

}

   以及支持该消息监听的消息容器

    

@Autowired MyMessageListener messageListener;

@Bean(name="queue1ListenerContainer")
	public DefaultMessageListenerContainer DefaultMessageListenerContainer(){
		DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
		listenerContainer.setConnectionFactory(PooledConnectionFactory());
		listenerContainer.setDestination(queue1Destination());
		listenerContainer.setMessageListener(messageListener);
		listenerContainer.setConcurrentConsumers(2);//可以理解为起两个线程去消费消息
		return listenerContainer;
	}

 

至此主流程开发结束。

 

 

 

© 著作权归作者所有

共有 人打赏支持
haoran_10
粉丝 25
博文 88
码字总数 80846
作品 0
杭州
程序员
私信 提问
ActiveMQ初探(2)——与Spring整合

在上一章:ActiveMQ(1)——介绍与基本使用中,我们通过测试方法熟悉了ActiveMQ的流程,本章将ActiveMQ与Spring进行整合。 与Spring整合,除了原本的外,还需导入和包,如果Spring为5.0+,需...

yuanlaijike
2018/05/08
0
0
activeMQ5官方文档翻译-运行消息中间件

把activeMQ中间件运行起来 注:如果你想以内嵌的方式来使用消息中间件的话你可以参照怎么在一个连接中间嵌入消息中间件 以二进制文件的方式分发的ActiveMQ自带了一个'activemq'的脚本文件来运...

z_jordon
2015/05/31
0
0
Apache Camel框架之JMS路由

继上次Camel如何在做项目集成类型的项目中用于从FTP取文件和传文件之后,我们在系统集成中经常遇到的另一个应用就是将数据通过JMS传到消息中间件的queue里,或者从消息中间件的queue里取消息....

晨曦之光
2012/04/25
1K
0
Jfinal集成消息中间件-activeMQ,无法成功监听消息?

Manve : 3.3.3 activeMQ: 5.9.1 最近项目经理要求我研究下消息中间件,现在可以成功跑起一个spring+activeMQ案列了;但是当我想以为是异构系统吗;所以我特意分为2个工程,A工程发起消息;B工程监...

尾生
2015/12/11
881
1
ActiveMQ入门,ActiveMQ与RocketMQ的对比

ActiveMQ入门 前面的文章已经写过MQ的相关概念,这里不再赘述。 1.1 ActiveMQ是什么 ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 1.2 ActiveMQ的特点 ...

LinkedBear
2018/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

cnetos7+docker+rancher构建基于DevOps的全自动CI【01】

来自DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量、私有代码库与私有镜像库的应用等。 1、环境选择 安装Rancher环境,一定要在干净的...

Elson
14分钟前
1
0
21分钟教会你分析MaxCompute账单

背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出)...

zhaowei121
17分钟前
0
0
CTO职场解惑指南系列(一)

基于科技能够改变世界的事实,几乎每个公司的程序员都自带闪光灯。程序员的手和普通人的手自然是有区别的,“我们可是用双手改变了世界” 。(码农真的是靠双手吃饭,呵呵) 这个世界上但凡靠...

阿里云云栖社区
22分钟前
1
0
css实现图片自适应容器宽高

css实现图片自适应容器宽高的做法一般如下所示 <style>div{width: 200px; height: 200px}div img{width: 100%; height: 100%}</style><div><img src="xxxx.png" /></div> 当外层容......

小草先森
22分钟前
3
0
PlatON在CentOS上编译部署

本文作者为万向区块链CTO罗荣阁。 目录 PlatON在CentOS上编译部署 1. CentOS 环境准备 1.1. 使用rpm 安装devtoolset-7 1.2. 使用rpm 安装dos2unix 1.3. 准备PlatON代码 1.4. 确保build脚本正...

万向区块链
30分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部