转自:http://suhuanzheng7784877.iteye.com/blog/969865

  1. 集成环境

Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可以下载。本文是将Spring集成ActiveMQ来发送和接收JMS消息。

  1. 集成步骤

将下载的ActiveMQ解压缩后文件夹如下

activemq-all-5.4.2.jar是activemq的所有的类jar包。lib下面是模块分解后的jar包。将lib下面的

  1. /lib/activation-1.1.jar
  2. /lib/activemq-camel-5.4.2.jar
  3. /lib/activemq-console-5.4.2.jar
  4. /lib/activemq-core-5.4.2.jar
  5. /lib/activemq-jaas-5.4.2.jar
  6. /lib/activemq-pool-5.4.2.jar
  7. /lib/activemq-protobuf-1.1.jar
  8. /lib/activemq-spring-5.4.2.jar
  9. /lib/activemq-web-5.4.2.jar

文件全部拷贝到项目中。

而Spring项目所需要的jar包如下

  1. /lib/spring-beans-2.5.6.jar
  2. /lib/spring-context-2.5.6.jar
  3. /lib/spring-context-support-2.5.6.jar
  4. /lib/spring-core-2.5.6.jar
  5. /lib/spring-jms-2.5.6.jar
  6. /lib/spring-tx.jar

当然还需要一些其他的jar文件

  1. /lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar
  2. /lib/jms-1.1.jar
  3. /lib/log4j-1.2.15.jar
  4. /lib/slf4j-api-1.6.1.jar
  5. /lib/slf4j-nop-1.6.1.jar

项目的依赖jar都准备好后就可以写配置文件了。

Spring配置文件

配置文件内容如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context-2.5.xsd"
  8. default-autowire="byName">
  9. <!-- 配置connectionFactory -->
  10. <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
  11. destroy-method="stop">
  12. <property name="connectionFactory">
  13. <bean class="org.apache.activemq.ActiveMQConnectionFactory">
  14. <property name="brokerURL">
  15. <value>tcp://127.0.0.1:61616</value>
  16. </property>
  17. </bean>
  18. </property>
  19. <property name="maxConnections" value="100"></property>
  20. </bean>
  21. <!-- Spring JMS Template -->
  22. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  23. <property name="connectionFactory">
  24. <ref local="jmsFactory" />
  25. </property>
  26. <property name="defaultDestinationName" value="subject" />
  27. <!-- 区别它采用的模式为false是p2p为true是订阅 -->
  28. <property name="pubSubDomain" value="true" />
  29. </bean>
  30. <!-- 发送消息的目的地(一个队列) -->
  31. <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
  32. <!-- 设置消息队列的名字 -->
  33. <constructor-arg index="0" value="subject" />
  34. </bean>
  35. <!-- 消息监听     -->
  36. <bean id="listenerContainer"
  37. class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  38. <property name="concurrentConsumers" value="10" />
  39. <property name="connectionFactory" ref="jmsFactory" />
  40. <property name="destinationName" value="subject" />
  41. <property name="messageListener" ref="messageReceiver" />
  42. <property name="pubSubNoLocal" value="false"></property>
  43. </bean>
  44. <bean id="messageReceiver"
  45. class="com.liuyan.jms.consumer.ProxyJMSConsumer">
  46. <property name="jmsTemplate" ref="jmsTemplate"></property>
  47. </bean>
  48. </beans>

编写代码

消息发送者:这里面消息生产者并没有在Spring配置文件中进行配置,这里仅仅使用了Spring中的JMS模板和消息目的而已。

  1. public class HelloSender {
  2. /**
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
  7. new String[] { "classpath:/spring/applicationContext-jms.xml" });
  8. JmsTemplate template = (JmsTemplate) applicationContext
  9. .getBean("jmsTemplate");
  10. Destination destination = (Destination) applicationContext
  11. .getBean("destination");
  12. template.send(destination, new MessageCreator() {
  13. public Message createMessage(Session session) throws JMSException {
  14. return session
  15. .createTextMessage("发送消息:Hello ActiveMQ Text Message!");
  16. }
  17. });
  18. System.out.println("成功发送了一条JMS消息");
  19. }
  20. }

消息接收

  1. /**
  2. * JMS消费者
  3. *
  4. *
  5. * <p>
  6. * 消息题的内容定义
  7. * <p>
  8. * 消息对象 接收消息对象后: 接收到的消息体* <p>
  9. */
  10. public class ProxyJMSConsumer {
  11. public ProxyJMSConsumer() {
  12. }
  13. private JmsTemplate jmsTemplate;
  14. public JmsTemplate getJmsTemplate() {
  15. return jmsTemplate;
  16. }
  17. public void setJmsTemplate(JmsTemplate jmsTemplate) {
  18. this.jmsTemplate = jmsTemplate;
  19. }
  20. /**
  21. * 监听到消息目的有消息后自动调用onMessage(Message message)方法
  22. */
  23. public void recive() {
  24. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
  25. new String[] { "classpath:/spring/applicationContext-jms.xml" });
  26. Destination destination = (Destination) applicationContext
  27. .getBean("destination");
  28. while (true) {
  29. try {
  30. TextMessage txtmsg = (TextMessage) jmsTemplate
  31. .receive(destination);
  32. if (null != txtmsg) {
  33. System.out.println("[DB Proxy] " + txtmsg);
  34. System.out.println("[DB Proxy] 收到消息内容为: "
  35. + txtmsg.getText());
  36. } else
  37. break;
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }
  43. }

这里边也是并不是直接使用Spring来初始化建立消息消费者实例,而是在此消费者注入了JMS模板而已。

写一个main入口,初始化消息消费者

  1. public class JMSTest {
  2. /**
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
  7. new String[] { "classpath:/spring/applicationContext-jms.xml" });
  8. ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext
  9. .getBean("messageReceiver");
  10. System.out.println("初始化消息消费者");
  11. }
  12. }

使用的时候先开启ActiveMQ服务,默认是占用了61616端口。之后开启测试程序,开启2个消息消费者监听。之后再运行消息生产者的代码后,消息就可以被消息消费者接收到了。

Spring集成ActiveMQ配置 --转的更多相关文章

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

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

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

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

  3. spring集成mybatis配置多个数据源,通过aop自动切换

    spring集成mybatis,配置多个数据源并自动切换. spring-mybatis.xml如下: <?xml version="1.0" encoding=" ...

  4. spring 集成mongo配置

    spring继承Mongo使用的是spring-data. 如果需要加入两个mongo与spring集成的包,spring-data-commons-1.7.0.RELEASE.jar,spring- ...

  5. spring集成ActiveMQ居然要依赖这么多包

    做spring和ActiveMQ的集成,作maven依赖的时候有感(以前都不在乎,现在不一样了........省略) <!-- https://mvnrepository.com/artifac ...

  6. SPRING 集成 activemq 的 topic 模式

    概要 activemq 支持两种模式: 1.队列模式 2. 发布订阅者模式,topic有一个主题可以有多个订阅者.这种情况可以将一个消息,分发到多个消费者. 比如我有这样一个案例,用户需要同步,而且需 ...

  7. 160530、memcached集群(spring集成的配置)

    第一步:在linux机或windows机上安装memcached服务端(server) linux中安装memcached:centos中命令 yum -y install memcached 如果没 ...

  8. spring集成activeMQ

    1.安装activehttp://activemq.apache.org/activemq-5140-release.html2.运行D:\apache-activemq-5.14.0\bin\win ...

  9. spring 集成 log4j 配置

    在web.xml中增加如下代码: <context-param> <param-name>log4jConfigLocation</param-name> < ...

随机推荐

  1. Interllij IDEA常用快捷键

    [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...

  2. ZOJ 3206 Disaster Area Reconstruction

    已经确定本题是错题了! ---------------------------------------------------------------- 这题有问题,不是后台数据水了就是出题人的做法是 ...

  3. 第7天-javascript内置对象

    数组相关方法 concat 用来连接多个数组 <script> var a = [1,2,3]; var b = [3,4,5]; var c = a.concat(b); console ...

  4. linux的bash和shell关系

    shell通俗理解:把用户输入的命令翻译给操作系统. shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过 ...

  5. 用Chrome在手机上调试本地网页代码

    本文摘自Google 原文地址1:https://developers.google.com/web/tools/chrome-devtools/remote-debugging/?utm_sourc ...

  6. [BZOJ1444]有趣的游戏(AC自动机+矩阵乘法)

    n个等长字符串,机器会随机输出一个字符串(每个字母出现的概率为p[i]),问每个字符串第一个出现的概率是多少. 显然建出AC自动机,套路地f[i][j]表示i时刻位于节点j的概率. 构建转移矩阵,当i ...

  7. 【折半枚举】Ural Championship April 30, 2017 Problem G. Glasses with solutions

    题意:有n杯盐溶液,给定每杯里面盐的质量以及盐溶液的质量.问你有多少种方案选择一个子集,使得集合里面的盐溶液倒到一个被子里面以后,浓度为A/B. 折半枚举,暴力搜索分界线一侧的答案数,跨越分界线的答案 ...

  8. 【贪心】【堆】Gym - 101128C - Canvas Painting

    一些画布,每块有其大小,一开始都是白的,你任意将它们排序,然后一次操作可以选择一段连续的相同颜色的画布,从中任选一个位置,左侧涂上任意一种颜色,右侧涂上另一种.消耗是这一段画布的总的大小.问你要将所有 ...

  9. 【动态规划技巧题】POJ2229-Sumsets

    [题目大意] 把一个数n分成2的指数幂相加的形式,问有几种情况. [思路] 如果当前i为奇数,则必定有至少一个1,可以看作i-1的情形再加上一个1.即f[i]=f[i-1]. 如果当前i为偶数,假设没 ...

  10. GCDAsyncSocket类库,IOS下TCP通讯使用心得

    关于在IOS下使用Socket进行通讯的技术文章也许诺很久了,今日又是一个还债的日子,网上虽然很多介绍过AsyncSocket或GCDAsyncSocket的文章,但其实就那么一两篇大部分都是转载,于 ...