天天看點

ActiveMQ使用教程

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盤 

ActiveMQ使用教程

2:運作apache-activemq服務:輕按兩下 activemq.bat 

ActiveMQ使用教程

3:效果 

ActiveMQ使用教程

4:所需jar包 

ActiveMQ使用教程

5:spring配置檔案applicationcontext.xml 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?&gt;</code>

<code>&lt;!doctype beans public "-//spring//dtd bean//en" </code>

<code>     "http://www.springframework.org/dtd/spring-beans.dtd"&gt;</code>

<code>&lt;</code><code>beans</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>bean</code> <code>id</code><code>=</code><code>"connectionfactory"</code> <code>class</code><code>=</code><code>"org.apache.activemq.activemqconnectionfactory"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"brokerurl"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>value</code><code>&gt;tcp://localhost:61616?wireformat.maxinactivityduration=0&lt;/</code><code>value</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>property</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>bean</code><code>&gt;</code>

<code>    </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"connectionfactory"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>ref</code> <code>bean</code><code>=</code><code>"connectionfactory"</code><code>/&gt;</code>

<code>    </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>constructor-arg</code> <code>index</code><code>=</code><code>"0"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>value</code><code>&gt;messagequeue&lt;/</code><code>value</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>constructor-arg</code><code>&gt;</code>

<code>&lt;/</code><code>beans</code><code>&gt;</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 &lt; </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檔案,效果如下: 

ActiveMQ使用教程
ActiveMQ使用教程

注:即使 接收方啟動晚,或者 發送方關閉了, 接收方都會正常接收完所有資料 

特别說明:尊重作者的勞動成果,轉載請注明出處哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt247