ActiveMQ学习笔记(二) JMS与Spring

时间:2021-12-29 06:06:13
上文可见,JMS Native API使用起来不是特别方便。好在Spring提供了很好的JMS支持。

(一)配置ConnectionFactory 
如果使用连接池的话,不要忘记activemq-pool-5.6.0.jar

  1. <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
  2. <property name="connectionFactory" ref="innerConnectionFactory" />
  3. </bean>
  4. <bean id="innerConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
  5. <property name="brokerURL" value="tcp://localhost:61616" />
  6. </bean>

(二)配置一个Destination作为默认投递目标

  1. <bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue">
  2. <constructor-arg index="0" value="ztgame.amt.default.queue" />
  3. </bean>

(三)核心JmsTemplate

  1. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  2. <property name="connectionFactory" ref="connectionFactory" />
  3. <property name="defaultDestination" ref="defaultDestination" />
  4. </bean>

(四)JMS事务

  1. <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
  2. <property name="connectionFactory" ref="connectionFactory" />
  3. </bean>
  4. <tx:annotation-driven transaction-manager="jmsTransactionManager" />

(五)编写消息驱动Bean,两个接口实现一个即可

  • javax.jms.MessageListener
  • org.springframework.jms.listener.SessionAwareMessageListener
  1. package com.ztgame.amt.jms.mdp;
  2. import javax.jms.JMSException;
  3. import javax.jms.Session;
  4. import javax.jms.TextMessage;
  5. import org.springframework.jms.listener.SessionAwareMessageListener;
  6. import org.springframework.stereotype.Component;
  7. @Component("defaultMessageHandler")
  8. public class DefaultMessageHandler implements SessionAwareMessageListener<TextMessage> {
  9. public void onMessage(TextMessage message, Session session)
  10. throws JMSException {
  11. String text = message.getText();
  12. if (text.length() == 0) {
  13. System.out.println("<empty>");
  14. } else {
  15. System.out.println(text);
  16. }
  17. }
  18. }

(六)配置消息驱动Bean

  1. <!-- Message Driven POJOs -->
  2. <jms:listener-container connection-factory="connectionFactory">
  3. <jms:listener destination="ztgame.amt.default.queue" ref="defaultMessageHandler" />
  4. </jms:listener-container>

(七)编写测试代码

  1. package junit;
  2. import java.util.UUID;
  3. import javax.annotation.Resource;
  4. import javax.jms.JMSException;
  5. import javax.jms.Message;
  6. import javax.jms.Session;
  7. import org.junit.Test;
  8. import org.springframework.jms.core.JmsTemplate;
  9. import org.springframework.jms.core.MessageCreator;
  10. import org.springframework.test.context.ContextConfiguration;
  11. import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
  12. @ContextConfiguration({ "classpath:spring-beans.xml", "classpath:spring-jms.xml" })
  13. public class TestSomeService extends AbstractJUnit4SpringContextTests {
  14. @Resource
  15. private JmsTemplate jmsTempalte;
  16. @Test
  17. public void test() {
  18. jmsTempalte.send(new MessageCreator() {
  19. public Message createMessage(Session session) throws JMSException {
  20. return session.createTextMessage(UUID.randomUUID().toString());
  21. }
  22. });
  23. }
  24. }

ActiveMQ学习笔记(二) JMS与Spring的更多相关文章

  1. ActiveMQ学习笔记&lpar;一&rpar; JMS概要

    (一)什么是JMS jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  2. ActiveMQ学习笔记&lpar;5&rpar;——使用Spring JMS收发消息

      摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...

  3. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  4. WPF的Binding学习笔记&lpar;二&rpar;

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  5. AJax 学习笔记二&lpar;onreadystatechange的作用&rpar;

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  6. &lbrack;Firefly引擎&rsqb;&lbrack;学习笔记二&rsqb;&lbrack;已完结&rsqb;卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  7. JMX学习笔记&lpar;二&rpar;-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  8. java之jvm学习笔记二&lpar;类装载器的体系结构&rpar;

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  9. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. 数据库schema设计与优化

    原文地址 1. 前言 对于数据库而言,在日常开发中我们主要的关注点有两块,一个是schema的结构设计,另一个就是索引的优化,这两块是影响我们最终系统结构和性能的关键部分,自然也是我们花费精力最多的部 ...

  2. Oracle如何操作级联删除

    级联删除即删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键值引用删除的主键值的所有行. 语法: Foreign Key (column[,...n]) refe ...

  3. Terminal的快捷键 for Terminal for Mac OS 10&period;10&comma; Linux&sol;GNU&lpar;Ubuntu&comma; deepin&comma; elementory os&comma;CentOS&rpar;

    对于习惯用windows键盘的,突然转成Mac蓝牙键盘真的有点不习惯,尤其是多了⌘这个键,还有Alt键也成了Option 但是对于Windows下熟悉的快捷键,它们真的失效了,还好Ubuntu也常用, ...

  4. nutch&comma;hbase&comma;zookeeper兼容性问题

    nutch-2.1使用gora-0.2.1, gora-0.2.1使用hbase-0.90.4,hbase-0.90.4和hadoop-1.1.1不兼容,hbase-0.94.4和gora-0.2.1 ...

  5. Java实现断点下载Demo

    //1.声明URL String path="http://localhost:8080/day22_DownLoad/file/a.rmvb"; URL url=new URL( ...

  6. Java爬虫——模拟登录知乎

    登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...

  7. Python 连接MongoDB并比较两个字符串相似度的简单示例

    本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...

  8. nmon 性能监控网页结果显示——EasyNmon

    首先,看看最终展示的结果显示样式: 报告界面: 1.安装包下载地址:https://github.com/mzky/easyNmon 2.下载后有2个压缩文件: 其中,nmon16g_x86中含有不同 ...

  9. POJ 2186 强联通分量

    点击打开链接 题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其它全部牛喜欢 思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG.而拓扑序的值为DAG的长度,则加一,可是最后 ...

  10. CSS选择器之基本选择器&plus;属性选择器

    1.1      id选择器 #main{ font-size:12px; margin:0; padding:0; } 其中的#main就是id选择器,用于选择HTML页面中id = "m ...