`

用Spring的jmsTemplate同步发送消息

 
阅读更多

首先是spring的配置文件

 

<?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"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
						http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">

	<bean id="producer" class="springJMS.Producer">
		<property name="jmsTemplate" ref="jmsTemplate" />
	</bean>
	
	<bean id="consumer" class="springJMS.Consumer">
		<property name="jmsTemplate" ref="jmsTemplate" />
	</bean>
    
	<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">com.tibco.tibjms.naming.TibjmsInitialContextFactory</prop>
                <prop key="java.naming.provider.url">tibjmsnaming://gftsint.nam.nsroot.net:7222</prop>
                <prop key="java.naming.factory.url.pkgs">com.tibco.tibjms.naming</prop>
            </props>
        </property>
    </bean>
    
    <bean id="jndiQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="tech.na.cars.QueueCF"/>
        <property name="jndiTemplate" ref="jndiTemplate"/>
        
    </bean>
    
    <bean id="queueConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="jndiQueueConnectionFactory"/>
        <property name="sessionCacheSize" value="1"/>
	</bean>
	
	<bean id="queueDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
   		<property name="jndiTemplate" ref="jndiTemplate"/>
   		<property name="jndiName" value="tech.na.cars.cvas5.request.queue"/>
	</bean>
	
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="queueConnectionFactory" />
		<property name="receiveTimeout" value="600000" />
		<property name="timeToLive" value="3600000" />
		<property name="defaultDestination" ref="queueDestination"/>
	</bean>
</beans>

 

 

编写Producer类,用来发送JMS

 

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

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class Producer {
    private JmsTemplate jmsTemplate;

    public void send(){
        jmsTemplate.send(new MessageCreator(){

            @Override
            public Message createMessage(Session session) throws JMSException {
                TextMessage message = session.createTextMessage("Hello, this is a spring JMS message");
                
                return message;
            }
            
        });
    }
    
    public JmsTemplate getJmsTemplate() {
        return jmsTemplate;
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }
}

 编写Consumer类,用来接收消息

 

 

import javax.jms.JMSException;
import javax.jms.TextMessage;

import org.springframework.jms.core.JmsTemplate;

public class Consumer {
    private JmsTemplate jmsTemplate;
    
    public void receive(){
        TextMessage message = (TextMessage) jmsTemplate.receive();
        if(message == null){
            System.out.println("no message received!");
        }else{
            try {
                System.out.println(message.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }

    public JmsTemplate getJmsTemplate() {
        return jmsTemplate;
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }
}

 

 

最后编写测试类:

 

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestJMS {
    private static ClassPathXmlApplicationContext factory = null;
    
    public static void main(String[] args){
        String[] xmlProperties = new String[] { "beans/spring-jms-test.xml"};
        factory = new ClassPathXmlApplicationContext(xmlProperties);
        
        Producer producer = (Producer) factory.getBean("producer");
        producer.send();
        
        Consumer consumer = (Consumer) factory.getBean("consumer");
        consumer.receive();
    }
}

 

 

说明:

可以看到,用JmsTemplate收发消息非常简单,因为JmsTemplate几乎帮我们做了大多数的工作,相关关系如下图所示(可结合app-context.xml理解):

步骤与不使用Spring相似,只是都是通过配置完成的。

分享到:
评论

相关推荐

    JMS与Spring之一(用JmsTemplate同步收发消息)

    JMS与Spring之一(用JmsTemplate同步收发消息)

    Spring JMSTemplate 与 JMS 原生API比较

    NULL 博文链接:https://holdbelief.iteye.com/blog/1491604

    使用Jmstemplate向队列中发送数据

    NULL 博文链接:https://13813962825.iteye.com/blog/2066980

    spring-jms:Spring JmsTemplate演示

    简单使用 public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); JmsTemplate jmsTemplate =...

    Spring JMS异步发收消息 ActiveMQ

    JMS(使用消息中介:ActiveMQ) JMS为JAVA开发者提供了一个与消息中介进行交互,以及发送和接收消息的标准API,而且每一个消息中介的实现都会支持JMS。(即JMS为所有消息中介提供了统一接口);JmsTemplate是Spring...

    Spring+JMS+消息处理

    Spring+JMS+消息处理

    使用SpringJMS轻松实现异步消息传递

    传统的使用JMSAPI进行消息传递的实现包括多个步骤,例如JNDI查询队列连接工厂和Queue资源,在实际发送和接收消息前创建一个JMS会话。Spring框架则简化了使用JEE组件(包括JMS)的任务。它提供的模板机制隐藏了典型的...

    Spring 2.0 开发参考手册

    5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP...

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

    6.8.3. 使用Spring IoC来配置AspectJ的切面 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. 切入点实施 ...

    Spring+JMS+ActiveMQ+Tomcat实现消息服务的demo

    基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,...Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。

    ActiveMQ+Spring+Maven Demo

    使用spring jmstemplate写的activemq小demo,浅显易懂。工程下载导入可用(maven 工程) activemq 可直接apache官网下载 传送门http://activemq.apache.org/download.html

    Spring中文帮助文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

    Spring API

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring系列学习之SpringMessaging消息支持

    SpringFramework为与消息传递系统的集成提供了广泛的支持,从使用JmsTemplate简化JMSAPI的使用到异步接收消息的完整基础结构。SpringAMQP为高级消息队列协议提供了类似的功能集。SpringBoot还为RabbitTemplate和...

    springjms的demo

    Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。本例通过activeMQ服务器模拟了消息的发送与接收。需要注意的是,activeMQ的运行依赖jdk的环境,而且对jdk的版本也有要求,我用的是jdk1.6+...

    Spring+JMS+ActiveMQ+Tomcat实现消息服务_服务器应用

    基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示: ...Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。这里,我们的消息服务不涉及事务管理。下面简单说明实例。

    SPRING API 2.0.CHM

    JmsTemplate102 JmsTransactionManager JmsTransactionManager102 JmsUtils JmxAttributeSource JmxException JmxMetadataUtils JmxUtils JndiAccessor JndiCallback JndiDataSourceLookup ...

    SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    主要介绍了SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics