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

Spring JMS的开发应用--自定义消息转换器的使用(四)

阅读更多

          在Spring JMS、中可以通过实现MessageConverter自定义自己的消息转换器实现消息的转换。在Spring 的JMS1.1有SimpleMessageConverter实现基本的消息转换,在JMS1.02中SimpleMessageConverter102实现消息的转换的工作。

 

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

public class SMS  implements java.io.Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String username;
	private String message;
	
	public SMS(){
		
	}
	public SMS(String username,String message){
		this.username=username;
		this.message=message;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	
	
	

}

 

 

消息转换器:

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

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

import org.springframework.jms.support.converter.MessageConversionException;
import org.springframework.jms.support.converter.MessageConverter;

import com.easyway.jboss.jms.ptp.service.SMS;
/**
 * 自定义消息转换器MessageConverter实现
 * 在JmsTemplate提供了各种send方法,供发送消息使用,其中JmsTemplate中的
 * convertAndSend和receiveAndConvert方法能够借助于MessageConverter接口
 * 实现消息做相应的转换。
 * JMS1.1中SimpleMessageConverter实现String与TextMessage,等之间的转换
 * @author longgangbai
 *
 */
public class SMSConverter implements MessageConverter {

	@Override
	public Object fromMessage(Message message) throws JMSException,
			MessageConversionException {
		 SMS sms=new SMS();
		 MapMessage  mapmessage= (MapMessage  )message;
		 sms.setMessage(mapmessage.getString("message"));
		 sms.setUsername(mapmessage.getString("username"));
		return sms;
	}

	@Override
	public Message toMessage(Object object, Session session)
			throws JMSException, MessageConversionException {
		 SMS sms=(SMS)object;
		 MapMessage  mapmessage=session.createMapMessage();
		 mapmessage.setString("username", sms.getUsername());
		 mapmessage.setString("message", sms.getMessage());
		 return mapmessage;
	}

}

 

applicationContext-cjms-sender.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>

<!-- 
   创建自定义转换器
 -->
<bean id="smsconverter" class="com.easyway.jboss.jms.ptp.spring.service.SMSConverter"></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>
       <!-- 设置自定义转换器 -->
     <property name="messageConverter">
        <ref local="smsconverter"/>
     </property>
</bean>

</beans>

 发送消息的代码那:

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

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 com.easyway.jboss.jms.ptp.service.SMS;

/**
 * Spring中JMS的简单应用
 * Spring JMS的创建并发送
 * @author longgangbai
 *
 */
public class SpringCJMSQueueSender {
	
	private static final Log log=LogFactory.getLog(SpringCJMSQueueSender.class);
	
	public static void main(String[] args) {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext-cjms-sender.xml");
		JmsTemplate jt=(JmsTemplate)ctx.getBean("jmsTemplate");
		SMS sms=new SMS();
		sms.setMessage("message");
		sms.setUsername("wangna");
		jt.convertAndSend(sms);
		log.info("发送信息成功!");
		
	}
}

 

applicationContext-cjms-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>
<!-- 
   创建自定义转换器
 -->
<bean id="smsconverter" class="com.easyway.jboss.jms.ptp.spring.service.SMSConverter"></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>
     <!-- 设置自定义转换器 -->
       <property name="messageConverter">
        <ref local="smsconverter"/>
     </property>
</bean>

</beans>

 接收消息的代码如下:

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

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 com.easyway.jboss.jms.ptp.service.SMS;
/**
 * Spring JMS 消息的接受
 * @author longgangbai
 *
 */
public class SpringCJMSQueueReceive {
private static final Log log=LogFactory.getLog(SpringCJMSQueueReceive.class);
	
	public static void main(String[] args) {
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext-cjms-receive.xml");
		JmsTemplate jt=(JmsTemplate)ctx.getBean("jmsTemplate");
		SMS sms=(SMS)jt.receiveAndConvert();
		System.out.println("username:"+sms.getUsername());
		System.out.println("message:"+sms.getMessage());
		System.out.println(".......");
		
	}
}

 

分享到:
评论
1 楼 di1984HIT 2016-04-21  
学习了~~~

相关推荐

    ActiveMQ与spring集成实例之使用消息转换器

    Spring 提供了多种内置的消息转换器,如 `SimpleMessageConverter` 和 `XmlMessageConverter`,但也可以自定义转换器。 例如,如果我们要将 Java 对象转换为 JSON 格式并发送,可以使用 Jackson 库配合 `...

    spring-integration-stream-2.1.5.RELEASE.zip

    通过定义消息通道(channels)、消息源(sources)、消息处理器(gateways)和消息转换器(transformers),可以构建出强大的集成解决方案。同时,其丰富的监控和日志记录功能也有助于排查和优化系统的运行情况。 ...

    spring-framework-4-reference

    Registering a LoadTimeWeaver允许在应用类加载器的加载时将类转换器应用到类上。 此外,ApplicationContext接口提供了Spring IoC容器的主要实现,它扩展了BeanFactory接口,增加了更多的企业级功能,如支持国际化...

    sample-spring-boot-war-jms:使用JPA和Spring-Boot的示例Spring JMS

    7. **消息转换器**: Spring JMS提供了一些内置的消息转换器,如`StringMessageConverter`,可以根据需要自定义转换规则,确保消息体能在消息生产者和消费者之间正确转换。 8. **Web层整合**: 将JMS与RESTful API...

    Spring整合JMS(三)——MessageConverter介绍

    Spring提供了对JMS的全面支持,包括连接工厂配置、消息生产者、消费者以及消息转换器等。JMS允许应用程序通过消息中间件进行解耦通信,提高系统的可扩展性和可靠性。Spring JMS抽象了JMS API,提供了更易于使用的...

    spring集成JMS

    Spring框架作为一个强大的企业级应用开发框架,提供了对JMS的全面支持,使得开发者能够方便地在Spring应用中集成JMS,实现异步消息处理和高可用性。 一、JMS简介 JMS是一种API,用于在分布式环境中发送、接收和管理...

    spring-flex-reference

    #### 四、使用Spring Security保护BlazeDS目的地 ##### 4.1 引言 为了确保应用程序的安全性,需要对BlazeDS目的地进行访问控制。Spring Security提供了一种强大的方式来实现这一点。 ##### 4.2 配置Spring ...

    spring-frame-4-reference

    Spring提供了强大的验证、数据绑定和类型转换功能,这对于Web开发尤为重要。主要包括以下几个方面: - **Validation using Spring’s Validator interface**:Spring支持通过Validator接口实现数据验证。 - **...

    spring-messaging源码

    五、消息转换器与消息模板 Spring Messaging提供了`MessageConverter`接口,用于在消息体和Java对象之间进行转换。常见的实现有`SimpleMessageConverter`和`Jackson2JsonMessageConverter`,分别支持基本类型和JSON...

    Spring整合JMS

    当我们谈论"Spring整合JMS"时,意味着我们要将Spring框架与Java消息服务(Java Message Service)进行集成,以便利用JMS的异步通信能力来处理应用程序中的消息传递。 **JMS简介** JMS是一种标准API,用于在分布式...

    消息中间件-spring-MQ.zip

    总的来说,Spring MQ的使用能够帮助开发者轻松地在Spring应用中实现消息驱动的架构,提升系统的稳定性和扩展性。"spring-MQ-main"项目可能包含了这些概念的实现,通过学习和运行这个项目,你可以更深入地理解和掌握...

    spring-reference

    Spring框架是一个轻量级的Java应用开发框架,旨在简化企业级应用的开发过程。它通过提供一系列强大的特性来实现这一目标,比如依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, ...

    spring的jar包源码

    Spring框架是Java开发中不可或缺的一部分,它以其模块化、易用性和灵活性著称。源码分析可以帮助我们深入了解其内部机制,提升我们的编程技能。以下是对标题"spring的jar包源码"和描述"spring的jar包源码"中涉及的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    Spring 2.0 开发参考手册

    19.3.1. 使用消息转换器 19.3.2. SessionCallback 和ProducerCallback 19.4. 接收消息 19.4.1. 同步接收 19.4.2. 异步接收 - 消息驱动的POJOs 19.4.3. SessionAwareMessageListener 接口 19.4.4. ...

    spring integration in action

    - **Spring Integration 如何简化集成开发:** 通过使用标准的 Java POJO 和 Spring Bean 定义,简化了集成应用的开发和维护过程。 #### Part 2 - 消息传递 **3: 消息和通道** - **消息模型:** 解释了 Spring ...

    spring integration reference 4

    - **@IntegrationConverter**:自定义消息转换器,可以在消息转换过程中进行转换。 - **@EnablePublisher**:用于启用对发布者的支持,能够发送消息到一个或多个订阅者。 - **Redis Channel Message Stores**:使用 ...

    Spring-Framework-4.x参考文档.pdf

    Spring Framework 是一个开源的企业级 Java 应用程序框架,旨在简化企业级应用程序的开发过程。它提供了全面的编程模型,使得开发者能够更轻松地构建和维护复杂的应用系统。 **1.2 依赖注入与控制反转** - **1.2.1...

    结合Spring2.0和ActiveMQ进行异步消息调用

    例如,可以使用`&lt;jms:listener-container&gt;`元素配置一个ActiveMQ的连接工厂,然后定义消息监听器来处理接收到的消息。 ```xml &lt;jms:listener-container connection-factory="connectionFactory" container-type=...

Global site tag (gtag.js) - Google Analytics