`
fantasy
  • 浏览: 516064 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在Spring中使用JMS

    博客分类:
  • Java
阅读更多

什么是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.        
  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.      <!---->  
  18.      < bean   id = "jmsTemplate"   
  19.          class = "org.springframework.jms.core.JmsTemplate" >   
  20.          < property   name = "connectionFactory" >   
  21.              < bean   
  22.                  class = "org.springframework.jms.connection.SingleConnectionFactory" >   
  23.                  < property   name = "targetConnectionFactory"   
  24.                      ref = "jmsConnectionFactory"   />   
  25.              bean >   
  26.          property >   
  27.      bean >   
  28.   
  29.      <!----> <!----> 
  30.      < bean   id = "messageProducer"   
  31.          class = "jms.MessageProducer" >   
  32.          < property   name = "template"   ref = "jmsTemplate"   />   
  33.          < property   name = "destination"   ref = "destination"   />   
  34.      bean >   
  35. beans >   

 

java 代码
  1. import  javax.jms.Destination;   
  2. import  javax.jms.JMSException;   
  3. import  javax.jms.Message;   
  4. import  javax.jms.Session;   
  5.   
  6. import  org.springframework.jms.core.JmsTemplate;   
  7. import  org.springframework.jms.core.MessageCreator;   
  8.   
  9. /***********************************************************  
  10.  * 消息发送者  
  11.  *   
  12.  * @作者:kiral  
  13.  * @日期:2007-7-3  
  14.  **********************************************************/   
  15. public   class  MessageProducer {   
  16.   
  17.      public   void  send( final  String message) {   
  18.         template.send(destination,  new  MessageCreator() {   
  19.              public  Message createMessage(Session session)  throws  JMSException {   
  20.                 Message m = session.createTextMessage(message);   
  21.                  return  m;   
  22.             }   
  23.         });   
  24.     }   
  25.   
  26.      private  JmsTemplate template;   
  27.   
  28.      private  Destination destination;   
  29.   
  30.      public   void  setDestination(Destination destination) {   
  31.          this .destination = destination;   
  32.     }   
  33.   
  34.      public   void  setTemplate(JmsTemplate template) {   
  35.          this .template = template;   
  36.     }   
  37.   
  38. }  

发送方调用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.      <!---->  
  18.      < bean   id = "messageListener"   
  19.          class = "jms.MessageConsumer" >   
  20.          < property   name = "worksheetService"   ref = "worksheetService" > property >   
  21.     < bean >   
  22.   
  23.      <!---->  
  24.      < bean   id = "listenerContainer"   
  25.          class = "org.springframework.jms.listener.DefaultMessageListenerContainer" >   
  26.          < property   name = "connectionFactory"   ref = "jmsConnectionFactory"   />   
  27.          < property   name = "destination"   ref = "destination"   />   
  28.          < property   name = "messageListener"   ref = "messageListener"   />   
  29.     < bean >   
  30. < beans >   

 

java 代码
  1. import  javax.jms.Message;   
  2. import  javax.jms.MessageListener;   
  3.   
  4. import org.kiral.flow.service.WorksheetService;   
  5.   
  6. /*******************************************************************************  
  7.  * 消息接收者  
  8.  *   
  9.  * @作者:kiral  
  10.  * @日期:2007-7-3  
  11.  ******************************************************************************/   
  12. public   class  MessageConsumer  implements  MessageListener {   
  13.   
  14.      private  WorksheetService worksheetService;   
  15.   
  16.      public  WorksheetService getWorksheetService() {   
  17.          return  worksheetService;   
  18.     }   
  19.   
  20.      public   void  setWorksheetService(WorksheetService worksheetService) {   
  21.          this .worksheetService = worksheetService;   
  22.     }   
  23.   
  24.      public   void  onMessage(Message message) {   
  25.         System.out.println(message);   
  26.         worksheetService.updateRole();   
  27.     }   
  28.   
  29. }  

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

分享到:
评论
4 楼 fantasy 2007-10-23  
对不起,现在工作忙,没有时间做这个例子
3 楼 crabboy 2007-10-22  
建议搞个打印到页面的例子
2 楼 eamon 2007-10-19  
我也用SPRING JMS + ACTIVEMQ做了异步收发的例子,但测试的时候,发现数据好不理想,发送端每秒也只能发50条的消息,接收服务器倒是没有性能上的问题,不知道是什么原因引起了.JMS的性能不会如此差吧.不知道谁有测试过的性能报告.....
1 楼 crabboy 2007-09-03  
能否提供有消息发送时,及时打印到页面上的例子?

相关推荐

    jms整合spring工程

    将JMS与Spring整合,可以更加便捷地在Spring应用中使用消息队列。 本项目"jms整合spring工程"是一个已经准备就绪的Java工程,它展示了如何在Spring框架中集成JMS,以便利用消息队列进行通信。主要依赖的是Apache ...

    Spring JMS

    org.springframework.jms.core 包提供了在 Spring 中使用 JMS 的核心功能。JMS 模板类提供了执行公共操作的 helper 方法,在需要更复杂应用的情况下,类把处理任务的核心委托给用户实现的回调接口。 Spring JMS 还...

    Spring+Weblogic JMS

    在本项目中,Spring与WebLogic JMS(Java消息服务)的集成展示了如何在Spring环境中使用消息队列进行通信。 WebLogic JMS是Oracle WebLogic Server提供的消息中间件,它遵循JMS规范,用于在分布式环境中传递消息,...

    在spring boot中使用jms集成IBM-MQ和TLQ,包含普通队列和主题订阅两种模式,并实现按需加载

    1) 本工程主要演示在SPRING BOOT工程中怎样使用JMS集成IBM-MQ及TLQ两种消息中间件产品 2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与...

    JMS-Spring

    在本文中,我们将探讨如何在Spring中使用JMS进行异步传输,以及与ActiveMQ的结合实例。 首先,我们需要配置Spring的JMS支持。在Spring 2.0及更高版本中,Spring不仅支持消息的生产,还支持消息的异步消费。配置主要...

    spring_jms

    总结起来,这个"spring_jms"实例旨在帮助初学者了解如何在Spring应用中使用JMS进行异步通信。通过结合Maven、Spring框架和ActiveMQ,我们可以构建一个高效、可靠的分布式消息系统,提升应用的性能和灵活性。通过深入...

    Spring发送接收JMS消息

    Spring的JMS支持使得在应用中使用消息传递变得简单且灵活。通过配置`ConnectionFactory`、`JmsTemplate`和消息监听器,我们可以方便地实现消息的发送和接收,从而提高系统的可扩展性和解耦性。同时,Spring提供的...

    spring-jms入门

    它提供了一个简单的API,使得开发者能够方便地在应用中使用消息传递功能。本文将深入探讨Spring-JMS的基础知识,包括它的核心概念、配置以及如何与ActiveMQ这样的消息中间件进行集成。 **1. JMS简介** Java消息服务...

    SpringJMS示例代码

    在本文中,我们将深入探讨SpringJMS的基本概念、如何与ActiveMQ集成,以及如何通过示例代码理解其工作原理。 1. **SpringJMS简介** SpringJMS是Spring框架对JMS API的包装,它简化了生产者和消费者之间的消息通信...

    spring-jms 源代码包

    spring-jmsspring-jmsspring-jmsspring-jmsspring-jmsspring-jms

    Java网络编程--基于Spring的JMS编程

    文件"基于Spring的JMS编程-1"可能包含了关于如何在Spring环境中配置和使用JMS的详细步骤,包括XML配置、代码示例以及可能的实战项目案例。进一步学习这些内容,你将能够熟练掌握Spring框架下的JMS编程技巧,从而在...

    spring整合jms+activemq

    在IT行业中,Spring框架是Java领域最广泛应用的轻量级框架之一,而JMS(Java Message Service)则是一种标准接口,用于在分布式系统中进行异步消息传递。ActivemQ是Apache软件基金会的一个项目,它实现了JMS规范,...

    JMS整合Spring实例

    在Spring框架中,我们可以使用`org.springframework.jms`包中的类和接口来处理JMS相关的任务。下面将详细介绍如何整合JMS与Spring,以及一个简单的实例。 ### 1. 添加依赖 首先,你需要在项目的构建文件(如Maven...

    spring,weblogic配置jms

    3. **配置JMS配置文件**: 在Spring的配置文件中,你需要定义JMS相关的bean,如ConnectionFactory和Destination。例如,你可以使用`&lt;jee:jndi-lookup&gt;`标签来查找在WebLogic中创建的JMS资源。 ```xml ...

    Spring-JMS把企业消息处理变容易.doc

    在Spring JMS中,`JmsTemplate`是核心组件,它有两种实现:JmsTemplate(基于JMS 1.1 API)和JmsTemplate102(基于JMS 1.0.2 API)。在示例应用程序中,通常会选择与目标JMS提供者兼容的版本。`JmsTemplate`通过回调...

    spring-jms-4.3.12.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-jms-4.3.12.RELEASE.jar; 赠送原API文档:spring-jms-4.3.12.RELEASE-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    Spring整合JMS(四)——事务管理

    在JMS中,事务有两种类型:Local事务和XAJMS事务。Local事务仅在JMS提供者内部进行,适用于简单场景。XAJMS事务则涉及到JMS和JTA(Java Transaction API)的交互,能实现跨资源的分布式事务,更适用于复杂的系统集成...

    spring-jms-4.3.20.RELEASE-API文档-中文版.zip

    赠送jar包:spring-jms-4.3.20.RELEASE.jar; 赠送原API文档:spring-jms-4.3.20.RELEASE-javadoc.jar; 赠送源代码:spring-jms-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    activemq与spring整合发送jms消息入门实例

    在Java世界中,ActiveMQ和Spring的整合是企业级应用中常见的消息中间件解决方案,用于实现JMS(Java Message Service)消息传递。本教程将深入探讨如何将这两个强大的工具结合在一起,以创建一个简单的发送JMS消息的...

Global site tag (gtag.js) - Google Analytics