读书人

用Spring的jmsTemplate同步发送讯息

发布时间: 2013-02-17 10:44:46 作者: rapoo

用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.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"><bean id="producer" ref="jmsTemplate" /></bean><bean id="consumer" ref="jmsTemplate" /></bean>    <bean id="jndiTemplate" value="tech.na.cars.QueueCF"/>        <property name="jndiTemplate" ref="jndiTemplate"/>            </bean>        <bean id="queueConnectionFactory" ref="jndiQueueConnectionFactory"/>        <property name="sessionCacheSize" value="1"/></bean><bean id="queueDestination" ref="jndiTemplate"/>   <property name="jndiName" value="tech.na.cars.cvas5.request.queue"/></bean><bean id="jmsTemplate" 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的jmsTemplate同步发送讯息

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

读书人网 >开源软件

热点推荐