activemq 是apache出品,最流行的,能力強勁的開源消息總線。activemq 是一個完全支援jms1.1和j2ee 1.4規範的 jms provider實作,盡管jms規範出台已經是很久的事情了,但是jms在當今的j2ee應用中間仍然扮演着特殊的地位。
activemq特性清單
1. 多種語言和協定編寫用戶端。語言: java, c, c++, c#, ruby, perl, python, php。應用協定: openwire,stomp rest,ws notification,xmpp,amqp
2. 完全支援jms1.1和j2ee 1.4規範 (持久化,xa消息,事務)
3. 對spring的支援,activemq可以很容易内嵌到使用spring的系統裡面去,而且也支援spring2.0的特性
4. 通過了常見j2ee伺服器(如 geronimo,jboss 4, glassfish,weblogic)的測試,其中通過jca 1.5 resource adaptors的配置,可以讓activemq可以自動的部署到任何相容j2ee 1.4 商業伺服器上
5. 支援多種傳送協定:in-vm,tcp,ssl,nio,udp,jgroups,jxta
6. 支援通過jdbc和journal提供高速的消息持久化
7. 從設計上保證了高性能的叢集,用戶端-伺服器,點對點
8. 支援ajax
9. 支援與axis的整合
10. 可以很容易得調用内嵌jms provider,進行測試
1:下載下傳 activemq 5.6.0 release
<a href="http://activemq.apache.org/download.html" target="_blank">http://activemq.apache.org/download.html </a>
放到d盤
2:運作apache-activemq服務:輕按兩下 activemq.bat
3:效果
4:所需jar包
5:spring配置檔案applicationcontext.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?></code>
<code><!doctype beans public "-//spring//dtd bean//en" </code>
<code> "http://www.springframework.org/dtd/spring-beans.dtd"></code>
<code><</code><code>beans</code><code>></code>
<code> </code><code><</code><code>bean</code> <code>id</code><code>=</code><code>"connectionfactory"</code> <code>class</code><code>=</code><code>"org.apache.activemq.activemqconnectionfactory"</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"brokerurl"</code><code>></code>
<code> </code><code><</code><code>value</code><code>>tcp://localhost:61616?wireformat.maxinactivityduration=0</</code><code>value</code><code>></code>
<code> </code><code></</code><code>property</code><code>></code>
<code> </code><code></</code><code>bean</code><code>></code>
<code> </code><code><</code><code>bean</code> <code>id</code><code>=</code><code>"jmstemplate"</code> <code>class</code><code>=</code><code>"org.springframework.jms.core.jmstemplate"</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"connectionfactory"</code><code>></code>
<code> </code><code><</code><code>ref</code> <code>bean</code><code>=</code><code>"connectionfactory"</code><code>/></code>
<code> </code><code><</code><code>bean</code> <code>id</code><code>=</code><code>"destination"</code> <code>class</code><code>=</code><code>"org.apache.activemq.command.activemqqueue"</code><code>></code>
<code> </code><code><</code><code>constructor-arg</code> <code>index</code><code>=</code><code>"0"</code><code>></code>
<code> </code><code><</code><code>value</code><code>>messagequeue</</code><code>value</code><code>></code>
<code> </code><code></</code><code>constructor-arg</code><code>></code>
<code></</code><code>beans</code><code>></code>
這時主要是配置activemq服務資訊與實作springjms的對應接口
6:消息産生者
?
20
21
22
23
24
25
26
27
28
<code>package</code> <code>test;</code>
<code>import</code> <code>javax.jms.jmsexception;</code>
<code>import</code> <code>javax.jms.message;</code>
<code>import</code> <code>javax.jms.session;</code>
<code>import</code> <code>org.springframework.jms.core.messagecreator;</code>
<code>/**</code>
<code> </code><code>* 消息産生者</code>
<code> </code><code>* user: liuwentao</code>
<code> </code><code>* time: 12-6-14 上午11:31</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>mymessagecreator </code><code>implements</code> <code>messagecreator {</code>
<code> </code><code>public</code> <code>int</code> <code>n = </code><code>0</code><code>;</code>
<code> </code><code>private</code> <code>static</code> <code>string str1 = </code><code>"這個是第 "</code><code>;</code>
<code> </code><code>private</code> <code>static</code> <code>string str2 = </code><code>" 個測試消息!"</code><code>;</code>
<code> </code><code>private</code> <code>string str = </code><code>""</code><code>;</code>
<code> </code><code>@override</code>
<code> </code><code>public</code> <code>message createmessage(session paramsession) </code><code>throws</code> <code>jmsexception {</code>
<code> </code><code>system.out.println(</code><code>"mymessagecreator n="</code> <code>+ n);</code>
<code> </code><code>if</code> <code>(n == </code><code>9</code><code>) {</code>
<code> </code><code>//在這個例子中表示第9次調用時,發送結束消息</code>
<code> </code><code>return</code> <code>paramsession.createtextmessage(</code><code>"end"</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>str = str1 + n + str2;</code>
<code> </code><code>return</code> <code>paramsession.createtextmessage(str);</code>
<code> </code><code>}</code>
<code>}</code>
7:發送消息方
<code>import</code> <code>javax.jms.destination;</code>
<code>import</code> <code>org.springframework.context.applicationcontext;</code>
<code>import</code> <code>org.springframework.context.support.classpathxmlapplicationcontext;</code>
<code>import</code> <code>org.springframework.jms.core.jmstemplate;</code>
<code> </code><code>* 發送消息方</code>
<code> </code><code>* time: 12-6-14 上午11:29</code>
<code>public</code> <code>class</code> <code>messagesender </code><code>extends</code> <code>thread {</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(string args[]) </code><code>throws</code> <code>exception {</code>
<code> </code><code>string[] configlocations = </code><code>new</code> <code>string[] {</code><code>"test/applicationcontext.xml"</code><code>};</code>
<code> </code><code>applicationcontext context = </code><code>new</code> <code>classpathxmlapplicationcontext(configlocations);</code>
<code> </code><code>jmstemplate jmstemplate = (jmstemplate) context.getbean(</code><code>"jmstemplate"</code><code>);</code>
<code> </code><code>destination destination = (destination) context.getbean(</code><code>"destination"</code><code>);</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>1</code><code>; i < </code><code>100</code><code>; i++) {</code>
<code> </code><code>system.out.println(</code><code>"發送 i="</code> <code>+ i);</code>
<code> </code><code>//消息産生者</code>
<code> </code><code>mymessagecreator mymessagecreator = </code><code>new</code> <code>mymessagecreator();</code>
<code> </code><code>mymessagecreator.n = i;</code>
<code> </code><code>jmstemplate.send(destination, mymessagecreator);</code>
<code> </code><code>sleep(</code><code>10000</code><code>);</code><code>//10秒後發送下一條消息</code>
8:消息接收方
29
30
31
32
33
34
<code>import</code> <code>javax.jms.textmessage;</code>
<code> </code><code>* 消息接收方</code>
<code> </code><code>* time: 12-6-14 上午11:32</code>
<code>public</code> <code>class</code> <code>messagereciver{</code>
<code> </code><code>textmessage msg = </code><code>null</code><code>;</code>
<code> </code><code>//是否繼續接收消息</code>
<code> </code><code>boolean</code> <code>iscontinue = </code><code>true</code><code>;</code>
<code> </code><code>while</code> <code>(iscontinue) {</code>
<code> </code><code>msg = (textmessage) jmstemplate.receive(destination);</code>
<code> </code><code>system.out.println(</code><code>"收到消息 :"</code> <code>+ msg.gettext());</code>
<code> </code><code>if</code> <code>(msg.gettext().equals(</code><code>"end"</code><code>)) {</code>
<code> </code><code>iscontinue = </code><code>false</code><code>;</code>
<code> </code><code>system.out.println(</code><code>"收到退出消息,程式要退出!"</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>system.out.println(</code><code>"程式退出了!"</code><code>);</code>
9:測試
運作 發送方和接收方 (順序随便) main檔案,效果如下:
注:即使 接收方啟動晚,或者 發送方關閉了, 接收方都會正常接收完所有資料
特别說明:尊重作者的勞動成果,轉載請注明出處哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt247