http://xiangtui.iteye.com/blog/978674

什么是JMS?

JMS即java消息服务,JMS通过消息的形式来降低组件之间的耦合度。

JMS由两部分组成消息发送者 和消息监听者 。

JMS的运用场景?

用户系统负责维护用户信息,文档系统负责维护文档信息,但是当用户删除的时候,需要将他所撰写的文档信息也删除的时候,在用户管理模块调用文档管理模块的接口,会造成用户模块和业务模块紧耦合。

这个时候可以使用JMS技术来将紧耦合转化为松耦合,具体做法是用户系统在删除,修改用户的时候往JMS服务器发送更新消息,又业务系统监听这些消息,然后按照自己的业务逻辑来进行相应的处理。

即组件A做了一件事情往消息服务器上发送了一个通知,组件B监听到了消息,处理自己的业务逻辑。

详细步骤:

1:配置消息服务器:配置JMS需要两个对象connectionFactory和 destination。

connectionFactory使用jboss自带的TopicConnectionFactory。

destination可以使用自定义的。

kiral-jms-service.xml   注意:文件名称一定要是-service.xml结尾。这个文件放在部署目录下。

xml 代码
  1. <!---->< xml   version = "1.0"   encoding = "UTF-8" ?>
  2. < server >
  3. < mbean   code = "org.jboss.mq.server.jmx.Topic"
  4. name = "jboss.mq.destination:service=Topic,name=kiralJms" >
  5. < depends   optional-attribute-name = "DestinationManager" > jboss.mq:service = DestinationManager depends >
  6. < depends   optional-attribute-name = "SecurityManager" > jboss.mq:service = SecurityManager depends >
  7. < attribute   name = "SecurityConf" >
  8. < security >
  9. < role   name = "guest"   read = "true"   write = "true" />
  10. < role   name = "publisher"   read = "true"   write = "true"   create = "false" />
  11. < role   name = "durpublisher"   read = "true"   write = "true"   create = "true" />
  12. security >
  13. attribute >
  14. mbean >
  15. server >

2:配置发送消息端

bean-jms.xml

xml 代码
  1. <!---->xml   version = "1.0"   encoding = "GB2312" ?>
  2. < beans >
  3. < bean   id = "jmsConnectionFactory"
  4. class = "org.springframework.jndi.JndiObjectFactoryBean" >
  5. < property   name = "jndiName" >
  6. < value > TopicConnectionFactory value >
  7. property >
  8. bean >
  9. < bean   id = "destination"
  10. class = "org.springframework.jndi.JndiObjectFactoryBean" >
  11. < property   name = "jndiName" >
  12. < value > topic/kiralJms value >
  13. property >
  14. bean >
  15. <!---->
  16. < bean   id = "jmsTemplate"
  17. class = "org.springframework.jms.core.JmsTemplate" >
  18. < property   name = "connectionFactory" >
  19. < bean
  20. class = "org.springframework.jms.connection.SingleConnectionFactory" >
  21. < property   name = "targetConnectionFactory"
  22. ref = "jmsConnectionFactory"   />
  23. bean >
  24. property >
  25. bean >
  26. <!---->  <!---->
  27. < bean   id = "messageProducer"
  28. class = "jms.MessageProducer" >
  29. < property   name = "template"   ref = "jmsTemplate"   />
  30. < property   name = "destination"   ref = "destination"   />
  31. bean >
  32. beans >
java 代码
  1. import  javax.jms.Destination;
  2. import  javax.jms.JMSException;
  3. import  javax.jms.Message;
  4. import  javax.jms.Session;
  5. import  org.springframework.jms.core.JmsTemplate;
  6. import  org.springframework.jms.core.MessageCreator;
  7. /***********************************************************
  8. * 消息发送者
  9. *
  10. * @作者:kiral
  11. * @日期:2007-7-3
  12. **********************************************************/
  13. public   class  MessageProducer {
  14. public   void  send( final  String message) {
  15. template.send(destination,  new  MessageCreator() {
  16. public  Message createMessage(Session session)  throws  JMSException {
  17. Message m = session.createTextMessage(message);
  18. return  m;
  19. }
  20. });
  21. }
  22. private  JmsTemplate template;
  23. private  Destination destination;
  24. public   void  setDestination(Destination destination) {
  25. this .destination = destination;
  26. }
  27. public   void  setTemplate(JmsTemplate template) {
  28. this .template = template;
  29. }
  30. }

发送方调用send方法发送消息。

3:配置消息接收者

xml 代码
  1. <!----> < xml   version = "1.0"   encoding = "UTF-8" ?>
  2. <!---->
  3. < beans >
  4. < bean   id = "jmsConnectionFactory"
  5. class = "org.springframework.jndi.JndiObjectFactoryBean" >
  6. < property   name = "jndiName" >
  7. < value > TopicConnectionFactory value >
  8. property >
  9. < bean >
  10. < bean   id = "destination"
  11. class = "org.springframework.jndi.JndiObjectFactoryBean" >
  12. < property   name = "jndiName" >
  13. < value > topic/kiralJms value >
  14. property >
  15. < bean >
  16. <!---->
  17. < bean   id = "messageListener"
  18. class = "jms.MessageConsumer" >
  19. < property   name = "worksheetService"   ref = "worksheetService" > property >
  20. < bean >
  21. <!---->
  22. < bean   id = "listenerContainer"
  23. class = "org.springframework.jms.listener.DefaultMessageListenerContainer" >
  24. < property   name = "connectionFactory"   ref = "jmsConnectionFactory"   />
  25. < property   name = "destination"   ref = "destination"   />
  26. < property   name = "messageListener"   ref = "messageListener"   />
  27. < bean >
  28. < beans >
java 代码
  1. import  javax.jms.Message;
  2. import  javax.jms.MessageListener;
  3. import org.kiral.flow.service.WorksheetService;
  4. /*******************************************************************************
  5. * 消息接收者
  6. *
  7. * @作者:kiral
  8. * @日期:2007-7-3
  9. ******************************************************************************/
  10. public   class  MessageConsumer  implements  MessageListener {
  11. private  WorksheetService worksheetService;
  12. public  WorksheetService getWorksheetService() {
  13. return  worksheetService;
  14. }
  15. public   void  setWorksheetService(WorksheetService worksheetService) {
  16. this .worksheetService = worksheetService;
  17. }
  18. public   void  onMessage(Message message) {
  19. System.out.println(message);
  20. worksheetService.updateRole();
  21. }
  22. }

接受方一旦接收到消息,就会打印在控制台。

在Spring中使用JMS相关推荐

  1. spring 中的JMS是什么?

    程序员看源码是成长的必要条件,最近在看spring的源码,看到spring框架中有一个模块是JMS,那么JMS到底是什么呢?那我们分成几个步骤来了解下吧. 1.什么是JMS?以及JMS的作用. JMS ...

  2. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  3. 如何在优雅地Spring 中实现消息的发送和消费

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  4. 如何在优雅地Spring 中实现消息的发送和消费 1

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  5. spring事务管理器的作用_【面试必问】Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  6. spring(7)---深入理解Spring核心技术——Spring中的各模块详解

    深入理解Spring核心技术--Spring中的各模块详解 Spring框架的两个基本概念IOC容器和AOP,相信大家现在对Spring中的这两个部分的基本概念有了一定的认识,好了,那么今天我们就来正 ...

  7. Spring中的事务控制

    Chapter 1. Spring中的事务控制(Transacion Management with Spring) Table of Contents 1.1. 有关事务(Transaction)的 ...

  8. Spring中的事务控制(Transacion Management with Spring)

    1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持1.2.2 ...

  9. 浅谈spring中的设计模式(转)

    工厂模式 BeanFactory,从xml或者注解加载BeanDefinition,然后实例化对象,其中AbstractAutowiredCapableBeanFactory实现了主要的逻辑 单例模式 ...

最新文章

  1. 科学计算:Python VS. MATLAB(4)----图形系统简介
  2. MySQL ADDDATE(d,n) 计算起始日期 d 加上 n 天的日期
  3. 【Time系列三】简单的计时器(秒表)
  4. linux如何建立隐藏目录,【Linux】文件与目录的默认权限与隐藏权限
  5. Java Web学习总结(44)—— RESTful 架构和 RESTful API 设计总结
  6. [转]MyBatis传入多个参数的问题 - mingyue1818
  7. ajax data参数
  8. 在 Ubuntu 和 Linux Mint 上释放空间的9种简单方法
  9. 安装dubbo管理控制台
  10. 祭十大已经逝去的软件
  11. Rockchip平台cpu散热风扇随温度自动调速的配置方法
  12. 川土微 数字隔离器CA-IS306X集成隔离电源的隔离式CAN收发器
  13. 关于cosine_similarity参数的问题
  14. OSPF多实例路由防环检测功能介绍
  15. 洛谷1262 间谍网络 tarjan缩点
  16. “七彩”糖果-吕中琪
  17. 计算机毕业设计之java+ssm基于web的医院门诊互联电子病历管理信息系统
  18. Python自动化测试框架
  19. 基于深度学习神经网络的农业病虫害识别(完整代码+数据)
  20. OkHttpClient 源码分析 1(基于3.9.0的源码)

热门文章

  1. 牛人的博客(机器学习,图像处理,计算机视觉)
  2. 13.2.5 模型层——单表操作
  3. 【Qt】Qt Creator中布局器详解
  4. 【MFC】CWinApp类详解
  5. 【STM32】RTC程序示例
  6. mysql 从库 read only_mysql salve从库设置read only 属性
  7. linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系
  8. 二叉树的直径—leetcode543
  9. Google公开C++编码规范
  10. HDU Problem - 5101 Select(二分)