`
longgangbai
  • 浏览: 7339184 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring JBOSSMQ JMS的开发应用(三)

阅读更多

            如果用过JMS的话,会发现它类似写JDBC或JCA代码。它有创建或检索JMS资源的样板代码,每当你需要编写一个新类来发送或接受消息时,都得重复编写那个样本代码。下面列出了传统JMS实现涉及的步骤:

1、创建JNDI初始上下文context;
2、从JNDI上下文获得队列连接工厂;
3、从队列连接工厂取得队列Queue;
4、创建一个Session对象;
5、创建一个发送或接受对象;
6、利用第5部创建的发送或接受对象发送或接受消息;
7、处理完消息后,关闭所有JMS资源。

在JBOSS中配置:

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ -->
<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mq.server.jmx.Queue"
         name="jboss.mq.destination:service=Queue,name=longgangbai">
    <attribute name="JNDIName">queue/longgangbai</attribute>
    <depends optional-attribute-name="DestinationManager" >jboss.mq:service=DestinationManager</depends>
  </mbean>

</server>

 

Spring中JMS的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
 <!-- 设置消息服务的初始化参数信息 -->
 <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
      <property name="environment">
           <props>
               <prop key="java.naming.factory.initial">
                   org.jnp.interfaces.NamingContextFactory
               </prop>
               <prop key="java.naming.provider.url">
                  jnp://localhost:1099
               </prop>
               <prop key="java.naming.factory.url.pkgs">
                   org.jboss.naming:org.jnp.interfaces
               </prop>
           </props>
      </property>
  
 </bean>
<!-- 
   创建消息服务的连接工厂的信息
    
                 JMS1.02 TopicConnectionFactory 和QueueConnectionFactory
				JMS1.1 TopicConnectionFactory 和QueueConnectionFactory合并为ConnectionFactory
				
 -->
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
   <property name="jndiName">
       <value>ConnectionFactory</value>
   </property>
   <property name="jndiTemplate">
        <ref local="jndiTemplate"/>
   </property>
</bean>
<!-- 创建JMS的目的地信息 -->
<bean  id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>queue/longgangbai</value>
     </property>
     <property name="jndiTemplate">
         <ref  local="jndiTemplate"/>
     </property>
</bean>

<!-- 创建JMS发送信息的模板的对象 -->
<bean  id="jmsTemplate"  class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
       <ref  local="connectionFactory"/>
     </property>
     
     <property name="defaultDestination">
        <ref local="destination"/>
     </property>
</bean>

</beans>

 

Spring中JMS的代码如下:

package com.easyway.jboss.jms.ptp.spring.service;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

/**
 * Spring中JMS的简单应用
 * @author longgangbai
 *
 */
public class JmsTemplate11 {
	
	private static final Log log=LogFactory.getLog(JmsTemplate11.class);
	
	public static void main(String[] args) {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		JmsTemplate jt=(JmsTemplate)ctx.getBean("jmsTemplate");
		jt.send(new MessageCreator(){

			@Override
			public Message createMessage(Session session) throws JMSException {
				   return session.createTextMessage("the spring queue /TestQueue");
			}
		});
		log.info("发送信息成功!");
		
	}
}

 客户端的配置:applicationContext-jms-receive.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
 <!-- 设置消息服务的初始化参数信息 -->
 <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
      <property name="environment">
           <props>
               <prop key="java.naming.factory.initial">
                   org.jnp.interfaces.NamingContextFactory
               </prop>
               <prop key="java.naming.provider.url">
                  jnp://localhost:1099
               </prop>
               <prop key="java.naming.factory.url.pkgs">
                   org.jboss.naming:org.jnp.interfaces
               </prop>
           </props>
      </property>
  
 </bean>
<!-- 
                                  创建消息服务的连接工厂的信息
                 JMS1.02 TopicConnectionFactory 和QueueConnectionFactory
				JMS1.1 TopicConnectionFactory 和QueueConnectionFactory合并为ConnectionFactory
 -->
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
   <property name="jndiName">
       <value>ConnectionFactory</value>
   </property>
   <property name="jndiTemplate">
        <ref local="jndiTemplate"/>
   </property>
</bean>
<!-- 创建JMS的目的地信息 -->
<bean  id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>queue/longgangbai</value>
     </property>
     <property name="jndiTemplate">
         <ref  local="jndiTemplate"/>
     </property>
</bean>

<!-- 创建JMS发送信息的模板的对象 -->
<bean  id="jmsTemplate"  class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
       <ref  local="connectionFactory"/>
     </property>
     
     <property name="defaultDestination">
        <ref local="destination"/>
     </property>
</bean>
<!-- 定义消息的监听器的实现 -->
<bean id="messageListener" class="com.easyway.jboss.jms.ptp.spring.service.SpringJMSMessageListener">
  <property name="jmsTemplate">
      <ref bean="jmsTemplate"/>
  </property>
</bean>

 

package com.easyway.jboss.jms.ptp.spring.service;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jms.core.JmsTemplate;
/**
 * Spring JMS 中消息监听的事件的处理
 * 
 * @author longgangbai
 *
 */
public class SpringJMSMessageListener implements MessageListener ,InitializingBean,DisposableBean{
 
 private static final Log log=LogFactory.getLog(SpringJMSMessageListener.class);
 
 
 private JmsTemplate jmsTemplate;
 private Connection conn;
 
 
 public JmsTemplate getJmsTemplate() {
  return jmsTemplate;
 }
 public void setJmsTemplate(JmsTemplate jmsTemplate) {
  this.jmsTemplate = jmsTemplate;
 }
 public Connection getConn() {
  return conn;
 }
 public void setConn(Connection conn) {
  this.conn = conn;
 }
 /**
  * 处理消息的方法
  */
 @Override
 public void onMessage(Message message) {
    if (message instanceof TextMessage) {
             try {
                 System.out.println(((TextMessage) message).getText());
             }
             catch (JMSException ex) {
                 throw new RuntimeException(ex);
             }
         }
         else {
             throw new IllegalArgumentException("Message must be of type TextMessage");
         }
 }
    /**
     * 初始化的连接的操作
     */
 @Override
 public void afterPropertiesSet() throws Exception {
  ConnectionFactory conFactory=jmsTemplate.getConnectionFactory();
  Destination  destination=jmsTemplate.getDefaultDestination();
  this.conn=conFactory.createConnection("guest", "guest");
  Session session=conn.createSession(false, QueueSession.AUTO_ACKNOWLEDGE);
  MessageConsumer  mc=session.createConsumer(destination);
  mc.setMessageListener(this);
  conn.start();
 }
 /**
  * 销毁连接的操作
  */
 @Override
 public void destroy() throws Exception {
  conn.close();  
 }
}

 

分享到:
评论

相关推荐

    ESB应用Spring_Hello_World

    总结,这个ESB应用Spring_Hello_World实例是学习和理解如何在JBoss ESB中整合Spring框架进行服务开发的一个基础练习。通过这个示例,开发者可以了解到ESB中的消息传递机制、队列配置以及如何利用Spring进行服务实现...

    spring基础功能分享参照.ppt

    10. **Java消息服务(JMS)支持**:Spring提供对JMS的全面支持,可以与多种开源消息代理如Apache ActiveMQ、Mule ESB、JbossMQ等协同工作。 11. **其他模块**:Spring还有许多其他功能,如测试支持、任务调度、缓存...

    ActiveMq-JMS好用实例详解

    相比于其他JMS Provider,如JBossMQ,ActiveMQ 在性能上有着显著的优势,通常情况下其处理消息的速度能够达到前者的10倍之多,这对于要求高吞吐量和低延迟的应用场景尤为重要。 7. **持续发展的优势** 作为...

    ActiveMq-JMS简单实例使用tomcat.doc

    Apache ActiveMQ 是一个流行的开源消息中间件,它实现了Java消息服务(JMS)规范,允许应用程序之间进行异步通信。在本文中,我们将探讨如何在Tomcat服务器上设置和使用ActiveMQ的简单实例。 **一、ActiveMQ的特点...

    Apache ActiveMQ教程 JMS 整合Tomcat

    值得一提的是,ActiveMQ与Spring框架的深度集成,为开发者提供了更简洁的配置管理和依赖注入机制,大大简化了开发流程。性能方面,ActiveMQ表现卓越,其速度通常比JBossMQ快10倍,显示出其在处理高并发、大数据量...

    ActiveMq-JMS简单实例使用tomcat.pdf

    同时,ActiveMQ具备良好的Spring框架支持,运行速度快,性能比JBossMQ高出十倍,并且有Apache社区的强大支持,这意味着它拥有持续发展的潜力。 下载和安装ActiveMQ非常简单,可以从官方网站...

    ActiveMQ_实践之路

    3. **与Spring框架的深度整合**:ActiveMQ可以无缝嵌入Spring框架的应用中,同时也支持Spring 2.0的特性,简化了消息服务的集成和管理。 4. **广泛的J2EE服务器兼容性**:ActiveMQ经过验证,可在Geronimo、JBoss 4...

    Active MQ教程+配置

    1. **开源JMS Providers**:市场上存在多个开源JMS Providers,如JbossMQ、Jboss Messaging、Joram、OpenJMS、MantaMQ、UberMQ和Somnifugi JMS等。然而,这些项目大多已停止更新,或者与特定的J2EE服务器绑定。相比...

    ActiveMQ教程+配置借鉴.pdf

    - 支持多种开源应用服务器,如 JBoss、Geronimo,以及与 Spring 框架的集成,使 ActiveMQ 能够无缝融入现有的开发环境。 - 支持多种客户端语言和协议,包括 Java、C、C++、C#、Ruby、Perl、Python 和 PHP,以及 ...

    Apache_ActiveMQ教程

    例如,ActiveMQ具有很好的Spring支持,允许开发者在Spring应用中轻松地集成ActiveMQ,并利用Spring提供的依赖注入和事务管理功能。另外,ActiveMQ社区提供了各种插件和扩展来支持不同的消息模式和协议,使得ActiveMQ...

    Apache_ActiveMQ教程.doc

    此外,ActiveMQ还支持多种协议,如STOMP、OpenWire和REST,以及与Spring框架的深度集成,确保了其在应用中的易用性和高效性。 在性能方面,ActiveMQ以其高速度著称,比JBossMQ快约10倍。由于得到Apache社区的支持,...

    Apache_ActiveMQ教程.docx

    此外,ActiveMQ还具有优秀的Spring框架支持,使得集成到Spring应用中变得极其便捷。其性能表现优越,通常比JBossMQ快10倍,且得益于Apache社区的支持,ActiveMQ拥有持续发展的潜力。 在部署Apache ActiveMQ时,首先...

    activemq简介

    ActiveMQ不仅能够无缝集成到JBoss、Geronimo等知名开源应用服务器中,还支持Spring框架的消息驱动,这意味着开发者可以在使用Spring的系统中轻松地内嵌ActiveMQ,利用其丰富的功能和高级特性。 #### P2P传输层创新 ...

    ApacheActiveMQ教程[归类].pdf

    ActiveMQ的一大亮点是其与Spring框架的良好集成,这使得在Spring应用中配置和使用ActiveMQ变得十分便捷。性能方面,ActiveMQ非常快速,通常比JBossMQ快10倍。由于得到Apache社区的广泛支持,ActiveMQ在持续发展和...

    ActiveMQ教程+配置[参照].pdf

    尽管ActiveMQ 在开源JMS提供商中脱颖而出,但仍有其他竞争对手,如JBoss的jBossMQ和jBoss Messaging,OpenJMS,以及IBM WebSphereMQ、BEA WebLogic JMS等商业产品。尽管这些产品都有各自的优点,但ActiveMQ的独立性...

    Apache ActiveMQ Queue Topic 详解

    5. **良好的 Spring 集成**:与 Spring 框架有很好的集成,可以轻松地将 ActiveMQ 集成到基于 Spring 的应用中。 6. **高性能**:相较于 JBossMQ 等其他消息中间件,ActiveMQ 的性能更优,通常能达到 JBossMQ 性能...

    ActiveMQ教程

    ActiveMQ 是一款由Apache软件基金会开发的开源消息中间件,广泛应用在各种企业级环境中。它遵循Java消息服务(JMS)1.1规范,并且兼容J2EE 1.4及以上版本,使得它可以在多种Java虚拟机(JVM)和Web容器中运行。...

    软件核心技术.docx

    ActiveMQ与Spring的良好集成,以及比JBossMQ快10倍的处理速度,使其成为企业级消息传递的理想选择。Apache社区的持续支持也确保了ActiveMQ的长期发展和稳定性。 再者,Nginx以其独特的热部署功能和出色的高并发处理...

    ActiveMQ电子书

    通过以上介绍,我们对ActiveMQ有了较为全面的认识,包括它的特性、部署过程以及如何开发简单的消息传递应用程序。无论是对于新手还是有一定经验的开发者来说,掌握这些核心概念都是至关重要的。

    Apache-ActiveMQ教程.docx

    ActiveMQ因其广泛的语言支持(包括Java、C、C++、AJAX、ACTIONSCRIPT等)、多协议支持(如STOMP、OpenWire、REST)以及与Spring框架的良好集成而备受青睐。此外,它的性能表现优秀,速度是JBossMQ的10倍,且由于...

Global site tag (gtag.js) - Google Analytics