spring整合activeMq 調試JMS
來源:互聯網
上載者:User
本文是關於spring和activeMq一種簡單的整合方式,只做參考學習只用,側重於對概念的理解。
1:JMS是Sun公司開發的一套訪問面向訊息的中介軟體(MOM)的標準的API,本文採用的MOM組件是 activeMq.大家可以到[url]http://activemq.apache.org/download.html[/url]網站下載activemq的程式包,
它使用非常簡單,解壓縮之後直接運行D:/activemq-4.1.1/bin目錄下的activemq.bat檔案,啟動服務就可以了。 而且我們只是簡單的測試,所以不需要我們配置jndi的相關內容。服務啟動
之後我們看到了相應的連接埠被啟動了,這樣我麼的MOM組件準備就緒... 2:接下來,我們建立一個WEB的項目(我用的是MyEclipse),匯入相關的包,建議大家不要使用MyEclipse中內建的那個spring2.0的包,因為好幾個項目都是因為這個調試了很久,就是因為那個包有問題。呵呵。
匯入spring2.0.jar、apache-activemq-4.1.1.jar、commons-pool-1.2.jar、long4j.jar、commons-logging-1.1.jar檔案到lib目錄下。接下來在WEB-INF下建立兩個XML檔案<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://www.springframework.org/schema/beans"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xmlns:tx="http://www.springframework.org/schema/tx"<br /> xsi:schemaLocation="<br /> [url]http://www.springframework.org/schema/beans[/url] [url]http://www.springframework.org/schema/beans/spring-beans-2.0.xsd[/url]<br /> [url]http://www.springframework.org/schema/tx[/url] [url]http://www.springframework.org/schema/tx/spring-tx-2.0.xsd[/url]"> </p><p> <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"><br /> <property name="connectionFactory"><br /> <bean class="org.apache.activemq.ActiveMQConnectionFactory"><br /> <property name="brokerURL"><br /> <value>tcp://localhost:61616</value><br /> </property><br /> </bean><br /> </property><br /> </bean> </p><p> <bean id="dest" class="org.apache.activemq.command.ActiveMQQueue"><br /> <constructor-arg value="myDest"/><br /> </bean> </p><p> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><br /> <property name="connectionFactory" ref="connectionFactory"></property><br /> <property name="defaultDestination" ref="dest"/><br /> </bean> </p><p> <bean id="messageSender" class="com.bo.impl.MessageSender"><br /> <property name="jmsTemplate" ref="jmsTemplate"></property><br /> </bean><br /></beans> </p><p><?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="[url]http://www.springframework.org/schema/beans[/url]"<br />xmlns:xsi="[url]http://www.w3.org/2001/XMLSchema-instance[/url]"<br />xmlns:tx="[url]http://www.springframework.org/schema/tx[/url]"<br />xsi:schemaLocation="<br /> [url]http://www.springframework.org/schema/beans[/url] [url]http://www.springframework.org/schema/beans/spring-beans-2.0.xsd[/url]<br /> [url]http://www.springframework.org/schema/tx[/url] [url]http://www.springframework.org/schema/tx/spring-tx-2.0.xsd[/url]"> </p><p> <bean id="dest" class="org.apache.activemq.command.ActiveMQQueue"><br /> <constructor-arg value="myDest"></constructor-arg><br /></bean> </p><p><bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"><br /> <property name="connectionFactory"><br /> <bean class="org.apache.activemq.ActiveMQConnectionFactory"><br /> <property name="brokerURL" value="tcp://localhost:61616"/><br /> </bean><br /> </property><br /></bean> </p><p><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><br /> <property name="connectionFactory" ref="connectionFactory"></property><br /> <property name="defaultDestination" ref="dest"></property><br /></bean> </p><p><bean id="messageReceiver" class="com.bo.impl.MessageReceiver"><br /> <property name="jmsTemplate" ref="jmsTemplate"></property><br /></bean><br /></beans> </p><p>3: 發送訊息的類:public class MessageSender extends JmsGatewaySupport{<br />public void sendTextMsg(final String msg) {<br /> this.getJmsTemplate().send(new MessageCreator() {<br /> // 這裡建立了一個 message 對象,然後可以對該對象進行 各種屬性的定義<br /> private Message message;<br /> public Message createMessage(Session session) throws JMSException {<br /> message = session.createTextMessage(msg); </p><p> message.setStringProperty("JMSXUserID", "123456789"); // 訊息所屬的使用者編碼<br /> message.setStringProperty("JMSXApp1ID", "001002"); // 訊息所屬的應用程式編碼 </p><p> return message;<br /> }<br /> });<br />}<br />}<br />4:接收訊息的類:public class MessageReceiver extends JmsGatewaySupport{ </p><p>public void receiverTextMsg(){<br /> TextMessage textMsg = (TextMessage)this.getJmsTemplate().receive(); </p><p> try{<br /> // 訊息 header 中常有的 屬性定義<br /> System.out.println("訊息編碼:" + textMsg.getJMSMessageID());<br /> System.out.println("目標對象:" + textMsg.getJMSDestination());<br /> System.out.println("訊息模式:" + textMsg.getJMSDeliveryMode()); // 訊息的模式 分為持久模式和非持久模式, 預設是 非持久的模式(2) </p><p> long sendTime = textMsg.getJMSTimestamp();<br /> Date date = new Date(sendTime);<br /> DateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br /> String temp = f.format(date); </p><p> System.out.println("訊息發送時間:" + temp);<br /> System.out.println("訊息失效時間:" + textMsg.getJMSExpiration()); // 這裡是一個 整型值 0 表示 該訊息永遠不會到期<br /> System.out.println("訊息優先順序:" + textMsg.getJMSPriority()); // 優先順序 0~9, 0 表示最低<br /> System.out.println("關聯編碼:" + textMsg.getJMSCorrelationID()); </p><p> System.out.println("回複訊息的地址:" + textMsg.getJMSReplyTo()); // 回複訊息的地址(Destination類型),由寄件者設定<br /> System.out.println("訊息類型:" + textMsg.getJMSType()); // jms 不使用該欄位, 一般類型是由 使用者自己定義<br /> System.out.println("是否簽收過:" + textMsg.getJMSRedelivered()); // 如果是 真 ,表示用戶端收到過該訊息,但是並沒有簽收 </p><p> // 訊息屬性 (properties)<br /> System.out.println("使用者編碼:" + textMsg.getStringProperty("JMSXUserID"));<br /> System.out.println("應用程式編碼:" + textMsg.getStringProperty("JMSXApp1ID"));<br /> System.out.println("已經嘗試發送訊息的次數:" + textMsg.getStringProperty("JMSXDeliveryCount")); </p><p> // 訊息體(body) 中傳遞的內容<br /> System.out.println("訊息內容:" + textMsg.getText()); </p><p> }catch(JMSException e){<br /> e.printStackTrace();<br /> }catch(Exception e){<br /> e.printStackTrace();<br /> }<br />}<br />} </p><p>5:測試發送訊息的類:
public class TestMessageSender {<br />private static ApplicationContext ctx = null; </p><p>static{<br /> ctx = new FileSystemXmlApplicationContext(new String[] { "WebRoot/jms_sender.xml" });<br />} </p><p>public static void sentTextMsg(){<br /> MessageSender messageSender = (MessageSender)ctx.getBean("messageSender");<br /> messageSender.sendTextMsg("這個世界真的很無奈!");<br />} </p><p>public static void main(String[] args){<br /> sentTextMsg();<br />}<br />}<br />6:測試接收訊息的類:public class TestMessageReceiver { </p><p>private static ApplicationContext ctx = null;<br />static {<br /> ctx = new FileSystemXmlApplicationContext(new String[] { "WebRoot/jms_receiver.xml" });<br />} </p><p>public static void getTextMsg(){<br /> MessageReceiver messageSender = (MessageReceiver) ctx.getBean("messageReceiver");<br /> messageSender.receiverTextMsg();<br />} </p><p>public static void main(String[] args) {<br /> getTextMsg();<br />}<br />}<br />7: 測試結果:訊息編碼:ID:hc-369a3f54b2b0-1440-1224731999968-1:0:1:1:1
目標對象:queue://myDest
訊息模式:2
訊息發送時間:2008-10-23 11:20:00
訊息失效時間:0
訊息優先順序:4
關聯編碼:null
回複訊息的地址:null
訊息類型:null
是否簽收過:false
使用者編碼:123456789
應用程式編碼:001002
已經嘗試發送訊息的次數:1