Spring整合JMS

來源:互聯網
上載者:User

一.:要在spring下整合ActiveMQ,那麼就需要將jar包匯入項目,所需jar包如下:

這些jar包來自“apache-activemq-5.6.0\lib”中。

二:相關的執行個體

1.執行個體--1

1):.配置Spring與ActiveMQ的設定檔:

<?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:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-2.5.xsd"    default-autowire="byName">        <!-- 配置connectionFactory -->    <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"        destroy-method="stop">        <property name="connectionFactory">            <bean class="org.apache.activemq.ActiveMQConnectionFactory">                <property name="brokerURL">                    <value>tcp://127.0.0.1:61616</value>                </property>            </bean>        </property>        <property name="maxConnections" value="100"></property>    </bean>    <!-- Spring JMS Template -->    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">        <property name="connectionFactory">            <ref local="jmsFactory" />        </property>        <property name="defaultDestinationName" value="subject" />        <!-- 區別它採用的模式為false是p2p為true是訂閱 -->        <property name="pubSubDomain" value="true" />    </bean>    <!-- 發送訊息的目的地(一個Topic) -->    <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">        <!-- 設定訊息佇列的名字 -->        <constructor-arg index="0" value="subject" />    </bean>    <bean id="messageReceiver" class="com.pwc.spring.jms.example.JMSReceiver">        <property name="jmsTemplate" ref="jmsTemplate"></property>    </bean>    </beans>

2):.訊息的寄件者:

package com.pwc.spring.jms.example;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;public class JMSSender {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");JmsTemplate template=(JmsTemplate)applicationContext.getBean("jmsTemplate");Destination destination=(Destination)applicationContext.getBean("destination");template.send(destination, new MessageCreator(){@Overridepublic Message createMessage(Session session) throws JMSException {// TODO Auto-generated method stubreturn session.createTextMessage("Send Message:Hello ActiveMQ Text Message!");}});System.out.println("Send the JMS Message Successfully!");}}

3):.訊息的接收者:

A:訊息接收的入口:

package com.pwc.spring.jms.example;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class JMSReceiverMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");JMSReceiver proxyJMSConsumer=(JMSReceiver)applicationContext.getBean("messageReceiver");proxyJMSConsumer.receive();System.out.println("Initial Consumer End! ");}}

B:訊息接收的具體方法:

package com.pwc.spring.jms.example;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.TextMessage;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jms.JmsException;import org.springframework.jms.core.JmsTemplate;public class JMSReceiver {public JMSReceiver(){}private JmsTemplate jmsTemplate;public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void receive(){ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext-jms.xml");Destination destination=(Destination)applicationContext.getBean("destination");while(true){try {TextMessage txtmsg=(TextMessage)jmsTemplate.receive(destination);if(null!=txtmsg){System.out.println("DB Proxy: "+txtmsg);System.out.println("DB Proxy Message: "+txtmsg.getText());}else{                                   break;                                }} catch (JmsException e) {e.printStackTrace();} catch (JMSException e) {e.printStackTrace();}}}}

先運行訊息的接收者,再運行訊息的寄件者;

運行結果:

2. 執行個體--2

1)Spring與ActiveMQ設定檔資訊:

<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">    <!--建立串連工廠-->    <bean id="connectionFactory"        class="org.apache.activemq.ActiveMQConnectionFactory">        <property name="brokerURL" value="tcp://localhost:61616"></property>    </bean>    <!-- 聲明ActiveMQ訊息目標,目標可以是一個隊列,也可以是一個主題ActiveMQTopic-->    <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">        <constructor-arg index="0" value="springactivemq"></constructor-arg>    </bean>    <!---->    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">        <property name="connectionFactory" ref="connectionFactory"></property>        <property name="defaultDestination" ref="destination"></property>        <property name="receiveTimeout" value="600"></property>    </bean>    <bean id="sender" class="com.pwc.spring.jms.further.Sender">        <property name="jmsTemplate" ref="jmsTemplate"></property>    </bean>    <bean id="receiver" class="com.pwc.spring.jms.further.Receiver">        <property name="jmsTemplate" ref="jmsTemplate"></property>    </bean></beans>

2. 寄件者發送訊息

A:發送訊息的入口

package com.pwc.spring.jms.further;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SenderMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");Sender sender=(Sender)context.getBean("sender");sender.sendInfo();}}

B:發送訊息的具體方法

package com.pwc.spring.jms.further;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.Session;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;public class Sender {private JmsTemplate jmsTemplate;public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void sendInfo(){jmsTemplate.send(new MessageCreator(){@Overridepublic Message createMessage(Session session) throws JMSException {MapMessage message=session.createMapMessage();message.setString("lastName", "Leio");return message;}});}}

3. 接收者接收訊息

A:接收訊息入口:

package com.pwc.spring.jms.further;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class ReceiverMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");Receiver receiver=(Receiver) context.getBean("receiver");System.out.println(receiver.receiveMessage());}}

B:接收訊息方法:

package com.pwc.spring.jms.further;import javax.jms.JMSException;import javax.jms.MapMessage;import org.springframework.jms.core.JmsTemplate;public class Receiver {private JmsTemplate jmsTemplate;public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public Receiver(){}public String receiveMessage(){String receiveMessage="";MapMessage message=(MapMessage)jmsTemplate.receive();try {receiveMessage=message.getString("lastName");} catch (JMSException e) {e.printStackTrace();}return receiveMessage;}}

先運行寄件者,再運行接收者,結果如下:

參考:http://www.cnblogs.com/xwdreamer/archive/2012/02/27/2369967.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.