天天看點

Linux下Apache ActiveMQ5.9的安裝配置與測試

變是永恒不變的真理。

由于公司的産品是由java做的,是以消息隊列當然也要用java的,是以選擇activemq是不錯的選擇。自從事運維以來安裝軟體、配置環境等可謂駕輕就熟,而面對java項目時還是心裡有點忐忑,activemq應該如何測試,如何寫activemq的測試例程,對于一個不經常操作java的人來說都是一個小小的挑戰。今天上午測試人員發過來一個壓縮包,用來在windows下測試activemq是否工作正常,感覺非常不好用。因為這個程式裡面寫成了兩個窗體程式,每一個程式都要填寫必要的參數才能執行,而且必須一收一發非常麻煩。到了中午,研發說測試環境中的activemq不好用了,發現是網絡波動和延遲的原因,是以下午花了一些時間研究了一下activemq的測試例程,現總結如下。

一、安裝配置activemq

#安裝java,如 openjdk-7-jdk或 openjdk-7-jre

1

<code>apt-get </code><code>install</code> <code>openjdk-7-jdk</code>

#建議至少有1gb剩餘記憶體,因為預設activemq_opts_memory="-xms1g -xmx1g"

2

3

4

5

<code>cd</code> <code>/tmp/</code>

<code>wget http:</code><code>//archive</code><code>.apache.org</code><code>/dist/activemq/apache-activemq/5</code><code>.9.0</code><code>/apache-activemq-5</code><code>.9.0-bin.</code><code>tar</code><code>.gz</code>

<code>tar</code> <code>zxf apache-activemq-5.9.0-bin.</code><code>tar</code><code>.gz</code>

<code>cd</code> <code>apache-activemq-5.9.0/</code>

<code>vim bin</code><code>/activemq</code>

# 以debug模式啟動activemq

<code>.</code><code>/bin/activemq</code> <code>console</code>

# 以正常模式啟動activemq

<code>.</code><code>/bin/activemq</code> <code>start</code>

如果提示以下資訊,則跟/etc/default/activemq檔案配置有關,可以去掉此檔案,或者修改bin/activemq啟動腳本中的第32行“activemq_configs="/etc/default/activemq $home/.activemqrc"”,去掉default,改成“activemq_configs="$home/.activemqrc"”,或者也可以用./activemq setup [ /etc/default/activemq | /$user/.activemqrc ]指令來建立一個activemq配置檔案。

info: loading '/etc/default/activemq'

info: using java '/usr/bin/java'

info: starting in foreground, this is just for debugging purposes (stop process by pressing ctrl+c)

./bin/activemq: 422: ./bin/activemq: /usr/bin/java -xms1g -xmx1g -djava.util.logging.config.file=logging.properties -dhawtio.realm=activemq -dhawtio.role=admins -dhawtio.roleprincipalclasses=org.apache.activemq.jaas.groupprincipal -djava.security.auth.login.config=/tmp/apache-activemq-5.9.0/conf/login.config  -dcom.sun.management.jmxremote  -djava.awt.headless=true -djava.io.tmpdir="/tmp/apache-activemq-5.9.0/tmp"                -dactivemq.classpath="/tmp/apache-activemq-5.9.0/conf;"               -dactivemq.home="/tmp/apache-activemq-5.9.0"               -dactivemq.base="/tmp/apache-activemq-5.9.0"               -dactivemq.conf="/tmp/apache-activemq-5.9.0/conf"               -dactivemq.data="/tmp/apache-activemq-5.9.0/data"                              -jar "/tmp/apache-activemq-5.9.0/bin/activemq.jar" start : not found

如果正常啟動後,activemq的工作端口是61616(tcp),監控端口是8161(http),此外activemq的工作端口還有:amqp://$hostname:5672、stomp://$hostname:61613、mqtt://$hostname:1883、ws://$hostname:61616,一般常用的就是tcptcp://$hostname:61616。

再通過ps –ef | grep activemq | grep –v grep和netstat –anop | grep 61616檢測一下端口和相應的程序activemq的安裝配置就算結束了。

二、通過java程式測試activemq

如何編譯運作java源代碼?

如果源代碼說明中需要導入jar包或者将jar包加入到classpath下面,那可以這樣做。

編譯java源代碼:javac -cp .:activemq-all-5.9.0.jar:/usr/lib/jvm/java-7-openjdk-amd64/jre app.java   

運作java類程式:java -cp .:activemq-all-5.9.0.jar:/usr/lib/jvm/java-7-openjdk-amd64/jre app

-cp等于-classpath,後面一定要加上java jre自帶的lib的位置,ubuntu下是/usr/lib/jvm/java-7-openjdk-amd64/jre,其他系統也類似,如果jar包在目前目錄,則将目前目錄“.”和jar封包件絕對路徑加入到classpath中,後面再帶上class名字指令的.java檔案名就可以了。

如果.java中有“package com.jms;”這樣的行,那還需要做額外操作(此處嘲諷一下開發人員,賤人就是矯情,測試例程都給别人挖坑),在.java檔案的目錄下一次建立com/jms目錄,再将.java檔案放到jms目錄下面,變成以下操作(以“package com.jms;”為例):

<code>mkdir</code> <code>-p com</code><code>/jms</code>   

<code>mv</code> <code>app.java com</code><code>/jms</code>    

<code>javac -</code><code>cp</code> <code>.:activemq-all-5.9.0.jar:</code><code>/usr/lib/jvm/java-7-openjdk-amd64/jre</code> <code>com</code><code>/jms/app</code><code>.java    </code>

<code>java -</code><code>cp</code> <code>.:activemq-all-5.9.0.jar:</code><code>/usr/lib/jvm/java-7-openjdk-amd64/jre</code> <code>com.jms.app</code>

個人猜測java中目錄分隔符當作”.”用,估計也是之是以具有移植性的原因之一吧。

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

<code>//package com.jms;</code>

<code>// refer: </code>

<code>import</code> <code>org.apache.activemq.activemqconnection; </code>

<code>import</code> <code>org.apache.activemq.activemqconnectionfactory; </code>

<code>import</code> <code>javax.jms.connection;</code>

<code>import</code> <code>javax.jms.connectionfactory;</code>

<code>import</code> <code>javax.jms.deliverymode;</code>

<code>import</code> <code>javax.jms.destination;</code>

<code>import</code> <code>javax.jms.exceptionlistener;</code>

<code>import</code> <code>javax.jms.jmsexception;</code>

<code>import</code> <code>javax.jms.message;</code>

<code>import</code> <code>javax.jms.messageconsumer;</code>

<code>import</code> <code>javax.jms.messageproducer;</code>

<code>import</code> <code>javax.jms.session;</code>

<code>import</code> <code>javax.jms.textmessage;</code>

<code>public</code> <code>class</code> <code>jmstestactivemq { </code>

<code>        </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) </code><code>throws</code> <code>jmsexception { </code>

<code>                </code><code>connectionfactory connectionfactory = </code><code>new</code> <code>activemqconnectionfactory( </code>

<code>                                </code><code>activemqconnection.default_user, </code>

<code>                                </code><code>activemqconnection.default_password, </code>

<code>                                </code><code>"tcp://58.67.199.171:61616"</code><code>); </code>

<code>                </code><code>connection connection = connectionfactory.createconnection(); </code>

<code>                </code><code>connection.start(); </code>

<code>                </code><code>session session = connection.createsession(boolean.true, session.auto_acknowledge); </code>

<code>                </code><code>destination destination = session.createqueue(</code><code>"jmstestqueue"</code><code>); </code>

<code>                </code><code>messageproducer producer = session.createproducer(destination); </code>

<code>                </code><code>producer.setdeliverymode(deliverymode.non_persistent); </code>

<code>                </code><code>textmessage message = session.createtextmessage(</code><code>"hello world!"</code><code>); </code>

<code>                </code><code>system.out.println(</code><code>"發送消息:hello world!"</code><code>); </code>

<code>                </code><code>producer.send(message); </code>

<code>                </code><code>// session.commit();</code>

<code>                </code><code>session.close(); </code>

<code>                </code><code>connection.close();</code>

<code>                </code><code>connectionfactory connectionfactory2 = </code><code>new</code> <code>activemqconnectionfactory( </code>

<code>                        </code><code>activemqconnection.default_user, </code>

<code>                        </code><code>activemqconnection.default_password, </code>

<code>                        </code><code>"tcp://58.67.199.171:61616"</code><code>); </code>

<code>                </code><code>connection connection2 = connectionfactory2.createconnection(); </code>

<code>                </code><code>connection2.start(); </code>

<code>                </code><code>session session2 = connection2.createsession(boolean.true, session.auto_acknowledge); </code>

<code>                </code><code>destination destination2 = session2.createqueue(</code><code>"jmstestqueue"</code><code>); </code>

<code>                </code><code>messageconsumer consumer = session2.createconsumer(destination2); </code>

<code>                </code><code>while</code> <code>(</code><code>true</code><code>) { </code>

<code>                        </code><code>textmessage message2 = (textmessage) consumer.receive(</code><code>1000</code><code>); </code>

<code>                        </code><code>if</code> <code>(</code><code>null</code> <code>!= message2) </code>

<code>                                </code><code>system.out.println(</code><code>"收到消息:"</code> <code>+ message2.gettext()); </code>

<code>                        </code><code>else</code> 

<code>                                </code><code>break</code><code>; </code>

<code>                </code><code>} </code>

<code>                </code><code>consumer.close();</code>

<code>                </code><code>session2.close(); </code>

<code>                </code><code>connection2.close(); </code>

<code>        </code><code>} </code>

<code>}</code>

如果出現發送消息和收到消息則表示成功,運作結果如下:

Linux下Apache ActiveMQ5.9的安裝配置與測試
Linux下Apache ActiveMQ5.9的安裝配置與測試

參考:

--end--