一、环境准备

这里以 Maven 作为项目管理工具来创建工程。

项目目录结构:

1.1在pom.xml中添加依赖:

    <properties><spring-version>4.3.9.RELEASE</spring-version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring-version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>5.7.0</version><!-- 排除 ActiveMQ 自身依赖的 Spring --><exclusions><exclusion><artifactId>spring-context</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency></dependencies>

1.2定义 Spring 的配置文件

以点对点或队列模型为例进行集成,关于发布者/订阅者模型会以注释的形式贴出来。为了减少篇幅,Spring 配置文件中的头文件不再贴出。

公共的 Spring 配置文件common.xml

    <context:annotation-config/><!-- ActiveMQ 提供的ConnectionFactory --><bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><!-- 配置 brokerURL,这里换为你自己开启 ActiveMQ 服务的地址--><property name="brokerURL" value="tcp://192.168.248.136:61616"/></bean><!-- 可以理解为 Spring 提供的连接池 --><bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"><property name="targetConnectionFactory" ref="activeMQConnectionFactory"/></bean><!-- 点对点或队列模型配置队列的目的地 --><bean id="activeMQQueue" class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg name="name" value="spring-jms-queue"/></bean><!--发布者/订阅者模型配置主题的目的地 -->     <bean id="activeMQTopic" class="org.apache.activemq.command.ActiveMQTopic"><constructor-arg name="name" value="spring-jms-topic"/></bean>

生产者 Spring 配置文件producer.xml

    <!-- 导入公共配置 --><import resource="common.xml"/><!-- 配置 JmsTemplate --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory"/></bean><!-- 把 ProducerServiceImpl 交给Spring IoC 容器管理--><bean class="com.jas.jms.producer.ProducerServiceImpl"/>

消费者 Spring 配置文件consumer.xml

    <!-- 导入公共配置 --><import resource="common.xml"/><!-- 配置自定义消费者消息监听器 --><bean id="consumerMessageListener" class="com.jas.jms.consumer.ConsumerMessageListener"/><!-- 配置消息监听器的容器 --><bean id="container" class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory"/><property name="destination" ref="activeMQQueue"/><!--配置发布者/订阅者模型的目的地<property name="destination" ref="activeMQTopic"/>--><property name="messageListener" ref="consumerMessageListener"/></bean>

二、编写对应的代码

2.1生产者

ProducerService接口

package com.jas.jms.producer;public interface ProducerService {/*** 生产者发送消息* @param message*/void sendMessage(String message);
}

ProducerServiceImpl实现类

package com.jas.jms.producer;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;import javax.annotation.Resource;
import javax.jms.*;public class ProducerServiceImpl implements ProducerService {@AutowiredJmsTemplate jmsTemplate;/*** 这里以 @Resource 方式注入目的地对象* 如果是发布者/订阅者模式,只选要修改 name 中的值为“activeMQTopic”即可*/@Resource(name = "activeMQQueue")Destination destination;@Overridepublic void sendMessage(final String message) {jmsTemplate.send(destination, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {TextMessage textMessage = session.createTextMessage(message);return textMessage;}});System.out.println("消息已发送:" + message);}
}

生产者调用类Producer

package com.jas.jms.producer;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Producer {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("producer.xml");ProducerService producerService = context.getBean(ProducerService.class);// 生产者发送十次消息for (int i = 0; i < 10; i++) {producerService.sendMessage("test message:" + i);}// 关闭 IoC 容器context.close();}
}

2.2消费者

消费者消息监听ConsumerMessageListener

package com.jas.jms.consumer;import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;public class ConsumerMessageListener implements MessageListener {@Overridepublic void onMessage(Message message) {TextMessage textMessage = (TextMessage) message;try {System.out.println("接收已接收:" + textMessage.getText());} catch (JMSException e) {e.printStackTrace();}}
}

消费者调用类Producer

package com.jas.jms.consumer;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Consumer {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");}
}

2.3测试

首先开启两个消费者服务,在开启一个生产者服务。

消费者1输出:

消费者2输出:

2.4发布者/订阅者模型

common.xml配置文件中已经配置了发布者/订阅者模式,只需要在consumer.xml配置文件中注释掉<property name="destination" ref="activeMQQueue"/>,并启用activeMQQueue

还需要修改的一个地方是修改ProducerServiceImpl类中Destination destination;上面的注解为@Resource(name = "activeMQTopic")即可。

PS

代码 GitHub 地址:https://github.com/coderjas/activemq-study
什么是消息队列(Message queue):https://blog.csdn.net/codejas/article/details/79930909

(完)

ActiveMQ集成Spring相关推荐

  1. ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志

    我的团队和我正在创建一个由一组RESTful JSON服务组成的服务平台,该平台中的每个服务在平台中的作用就是分别提供一些独特的功能和/或数据.由于平台中产生的日志四散各处,所以我们想,要是能将这些日 ...

  2. 使用ActiveMQ支持Spring Integration路由

    正如我在上 一篇 文章中所讨论的那样 ,Spring Integration(SI) 是在Spring Framework之上构建的路由框架 ,它使您可以使用经过验证的企业集成模式来通过消息传递解决系 ...

  3. Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

  4. boot spring 获取请求端口浩_Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

  5. springboot的细节挖掘(ActiveMq集成)

    官网下载地址: http://activemq.apache.org/?utm_source=csdn_toolbar 下载的时候区别:ActiveMQ 5 "Classic"和A ...

  6. Spring MVC集成Spring Data Reids和Spring Session实现Session共享

    说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...

  7. activiti集成spring

    1.集成Spring配置 添加依赖pom activiti-spring 基于Spring的默认配置activiti-context.xml Activiti核心服务需要注入Spring容器的 2.基 ...

  8. SpringBoot集成Spring Security —— 第二章自动登录

    文章目录 一.修改login.html 二.两种实现方式 2.1 Cookie 存储 2.2 数据库存储 2.2.1 基本原理 2.2.2 代码实现 三.运行程序 在上一章:SpringBoot集成S ...

  9. ActiveMQ整合spring

    主要讲解点: 使用ActiveMQ完成发短信功能(重点) 2.Kindeditor上传图片及图片管理器功能的实现(对应后台代码是重点, Kindeditor参照demo会用就行) 宣传活动的保存功能( ...

最新文章

  1. S3C6410的SPI控制器
  2. 中国网速排行榜出炉:上海最快 均速达5.4Mb/s
  3. 如何用 nodejs 编写TCP长连接应用
  4. 邀您共赴数据库学术顶会ICDE 2019——阿里云专场 零距离接触达摩院数据库“最强大脑”...
  5. 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount
  6. 【RUST官方语言中文翻译】前言
  7. 初涉springboot(一)
  8. 【回环检测】如何理解loopClosing中的连续性检测
  9. MAC下安装与配置MySQL [转]
  10. java多线程工具类_Java多线程同步工具类之Semaphore
  11. 网易音乐链接html代码,爬取网易云音乐MP3链接脚本
  12. 服务器端口连通性测试
  13. (九)指向一维数组和二维数组的指针(数组指针)
  14. Jetson TK1 刷机步骤小记
  15. 将旧笔记本的硬盘DIY成移动硬盘
  16. 360做专业手机电商平台还是有搞头
  17. 每日一皮:朋友圈集赞原来还可以这样...
  18. 推荐一款视频音频剪辑软件,可免费试用
  19. htons(), htonl(), ntohs(), ntohl()
  20. sql 纵向求和_SQL里边的求和语句怎么写

热门文章

  1. SpringMVC获取请求参数-基本类型
  2. Spring Boot——Spring Security环境下跨域addCorsMappings与拦截器冲突导致跨域失效解决方案
  3. JavaFX——fxml文件加载错误:[javafx.fxml.LoadException]解决方案之一
  4. 服务器做文件共享服务特点,服务器主机做共享文件
  5. 轴固定位置_3轴、3+2轴、5轴加工都有哪些区别?这篇文章给你整明白
  6. 【算法学习笔记】哈夫曼树的构建和哈夫曼编码的实现代码
  7. Android应用开发-所有课堂代码
  8. 软件工程概论 课堂练习 第2次作业2【静态结构建模——画出相应对象模型】
  9. Bugku—MISC题总结
  10. 【DND图形库】五、按钮控件与音效