首先我们搭建一个spring-mvc项目,项目可以参考:spring-mvc 学习笔记

步骤:

  1. 在pom.xml中加上需要的包
  2. 修改web.xml,增加IOC容器
  3. spring配置文件application.xml增加对应的bean
  4. 生产者Java代码
  5. 消费者Java代码

1.在pom.xml加上需要的包

<!-- ActiveMQ支持 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<!-- spring的IOC容器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<!-- 因为ActiveMQ使用了xbean,所以要引用 -->
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>

2.web.xml的根路径下增加对spring容器的监听(注意:是增加,不是覆盖)

<web-app>
<!-- ContextLoaderListener 加载IOC容器,Spring框架的底层是listener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 指定Spring的配置文件的路径和名称 -->
<param-value>classpath:application.xml</param-value>
</context-param>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

3.application.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 查找最新的schemaLocation 访问 http://www.springframework.org/schema/ -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd"> <!-- 需要扫描注解的包 -->
<context:component-scan base-package="cn.duanjt"></context:component-scan> <!-- 连接工厂,设置地址和用户名密码 -->
<amq:connectionFactory id="connectionFactory" brokerURL="tcp://127.0.0.1:61616" userName="" password=""></amq:connectionFactory> <!-- 工厂连接池,池化,提高效率 -->
<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg name="targetConnectionFactory" ref="connectionFactory"></constructor-arg>
<property name="sessionCacheSize" value="100"></property>
</bean> <!-- 定义生产者 -->
<bean id="jmstemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg name="connectionFactory" ref="cachingConnectionFactory"></constructor-arg>
<!-- 是否为订阅模式 -->
<property name="pubSubDomain" value="false"></property>
</bean> <!-- 定义消费者,注册监听器 -->
<jms:listener-container destination-type="queue" container-type="default" connection-factory="cachingConnectionFactory" acknowledge="auto">
<jms:listener destination="zd-duanjt" ref="queueReceiver1" />
</jms:listener-container> </beans>

4.生产者的Java代码

package cn.duanjt.controller;

import javax.jms.*;

import org.springframework.beans.factory.annotation.*;
import org.springframework.jms.core.*;
import org.springframework.web.bind.annotation.*; @RestController
public class ActiveMQController {
@Autowired
@Qualifier("jmstemplate")
private JmsTemplate jmsTemplate; @RequestMapping("/SendMsg")
public String SendMsg(String content) {
System.out.println("接收到数据:" + content);
// zd-duanjt是ActiveMQ中队列的名称
jmsTemplate.send("zd-duanjt", new MessageCreator() { @Override
public Message createMessage(Session session) throws JMSException {
Message message= session.createTextMessage(content);
return message;
}
}); return "success";
}
}

5.消费者的Java代码

package cn.duanjt.controller;

import javax.jms.*;

import org.springframework.stereotype.Component;

// 注入到spring容器之后的名称是 queueReceiver1
@Component
public class QueueReceiver1 implements MessageListener { @Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("从ActiveMQ获取数据:" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
} }

注意:

1.application.xml文件需要引入ActiveMQ对应的xmlns和xsi:schemaLocation.直接从上面那文件搜索关键字“jms”和"activemq"都是需要引入的。

2.笔者这里是将生产者和消费者写到了一个程序里面,在具体实现的时候可以分开实现

3.关于pom.xml引入了xbean。可以参考http://berdy.iteye.com/blog/815309

spring集成JMS访问ActiveMQ的更多相关文章

  1. spring整合JMS - 基于ActiveMQ实现

    一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 ( ...

  2. spring集成Apache的ActiveMQ

    1.直接看优秀的博客 http://www.open-open.com/lib/view/open1435496659794.html

  3. 消息中间件ActiveMQ及Spring整合JMS

    一 .消息中间件的基本介绍 1.1 消息中间件 1.1.1 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排 ...

  4. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  5. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  6. Spring集成ActiveMQ配置 --转

    转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...

  7. ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯

    本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...

  8. 消费者端的Spring JMS 连接ActiveMQ接收生产者Oozie Server发送的Oozie作业执行结果

    一,介绍 Oozie是一个Hadoop工作流服务器,接收Client提交的作业(MapReduce作业)请求,并把该作业提交给MapReduce执行.同时,Oozie还可以实现消息通知功能,只要配置好 ...

  9. Spring整合JMS(一)——基于ActiveMQ实现

    1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...

随机推荐

  1. PostgreSQL 10首个测试版本发布

    mysql 从5.7到8.0,pg从9.6到10,干起来了.. PostgreSQL 10 的首个测试版发布了,此版本包含 PostgreSQL 10 最终将提供的所有功能的预览.当然,有些细节将在最 ...

  2. Net中应用 Redis 扩展类

    GIt地址:https://gitee.com/loogn/stackexchange-redis-typedextensions 1.stackexchange 类调用 using System; ...

  3. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定

    Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...

  4. python简说(二十一)开发接口

    一.flask举例 import flaskserver = flask.Flask(__name__)#新建一个服务,把当前这个python文件当做一个服务@server.route('/login ...

  5. ARM的栈指令(转)

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  6. [c/c++] programming之路(6)、ASCII码,数据类型、随机数、字符转换及拼接等

    一.变量 #include<stdio.h> #include<stdlib.h> void main0(){ //数据使用必须在范围内,否则产生溢出 unsigned +;/ ...

  7. salt stack 远程命令

    salt stack 远程命令 salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理.远程命令执行等操作. salt stack分为两个部分 salt-master,部署在控制 ...

  8. Django 创建项目笔记

    基本命令 mkdir mysite # 创建项目目录,常取名mysite cd mysite virtualenv env # env\Scripts\activate.bat # Win pip i ...

  9. 大臣的旅费|2013年蓝桥杯A组题解析第十题-fishers

    标题:大臣的旅费 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市 ...

  10. 【做题】CF388D. Fox and Perfect Sets——线性基&数位dp

    原文链接https://www.cnblogs.com/cly-none/p/9711279.html 题意:求有多少个非空集合\(S \subset N\)满足,\(\forall a,b \in ...