ActiveMQ搭建
下載
到ActiveMQ官網,找到下載點。
目前,
官網為http://activemq.apache.org/
Linux版本下載點之一為:http://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz
?
啟動
下載到本機,并解壓
wget http://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz tar -xf ./apache-activemq-5.11.1-bin.tar.gzwget http://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz tar -xf ./apache-activemq-5.11.1-bin.tar.gz
?
啟動(當然,由于依賴于JAVA,如果你沒有安裝JAVA,它會提醒你的,哈哈)
cd ./apache-activemq-5.11.1-bin/bin ./activemq startcd ./apache-activemq-5.11.1-bin/bin ./activemq start
?
測試啟動成功與否
ActiveMQ默認監聽61616端口,查此端口看看是否成功啟動
netstat -an|grep 61616netstat -an|grep 61616
?
如果一切順利,會看到如下日志
[nicchagil@localhost bin]$ ./activemq start INFO: Loading '/home/nicchagil/app/apache-activemq-5.11.1/bin/env' INFO: Using java '/home/nicchagil/app/jdk1.7.0_71//bin/java' INFO: Starting - inspect logfiles specified in logging.properties and log4j.prop erties to get details INFO: pidfile created : '/home/nicchagil/app/apache-activemq-5.11.1/data/activem q.pid' (pid '4858') [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ netstat -an | grep 61616 tcp 0 0 :::61616 :::* LIST EN [nicchagil@localhost bin]$[nicchagil@localhost bin]$ ./activemq start INFO: Loading '/home/nicchagil/app/apache-activemq-5.11.1/bin/env' INFO: Using java '/home/nicchagil/app/jdk1.7.0_71//bin/java' INFO: Starting - inspect logfiles specified in logging.properties and log4j.prop erties to get details INFO: pidfile created : '/home/nicchagil/app/apache-activemq-5.11.1/data/activem q.pid' (pid '4858') [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ [nicchagil@localhost bin]$ netstat -an | grep 61616 tcp 0 0 :::61616 :::* LIST EN [nicchagil@localhost bin]$
?
順便,登錄下管理員頁面,看看有木有問題:
URL : http://10.0.0.109:8161/admin/
ACC/PWD : admin/admin
?
嘗試基本消息功能
接下來,用簡單的點對點測試消息發送、消息接收。
引入包:
- activemq-client-5.11.1.jar
- geronimo-j2ee-management_1.1_spec-1.0.1.jar
- geronimo-jms_1.1_spec-1.1.1.jar
- hawtbuf-1.11.jar
- slf4j-api-1.7.10.jar
?
消息發送
package com.nicchagil.activemq.study.No001點對點;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session;import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {public static void main(String[] args) throws JMSException {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://10.0.0.109:61616");Connection connection = factory.createConnection();connection.start();Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("TestQueue");MessageProducer producer = session.createProducer(destination);producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);ObjectMessage message = session.createObjectMessage("hello world...");producer.send(message);session.commit();System.out.println("sent...");}}package com.nicchagil.activemq.study.No001點對點;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session;import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {public static void main(String[] args) throws JMSException {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://10.0.0.109:61616");Connection connection = factory.createConnection();connection.start();Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("TestQueue");MessageProducer producer = session.createProducer(destination);producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);ObjectMessage message = session.createObjectMessage("hello world...");producer.send(message);session.commit();System.out.println("sent...");}}
?
消息接收
package com.nicchagil.activemq.study.No001點對點;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.ObjectMessage; import javax.jms.Session;import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {public static void main(String[] args) throws JMSException {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://10.0.0.109:61616");Connection connection = factory.createConnection();connection.start();Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("TestQueue");MessageConsumer consumer = session.createConsumer(destination);ObjectMessage message = (ObjectMessage)consumer.receive();if (message != null) {String messageString = (String)message.getObject();System.out.println("Receive : " + messageString);}}}package com.nicchagil.activemq.study.No001點對點;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.ObjectMessage; import javax.jms.Session;import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {public static void main(String[] args) throws JMSException {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://10.0.0.109:61616");Connection connection = factory.createConnection();connection.start();Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("TestQueue");MessageConsumer consumer = session.createConsumer(destination);ObjectMessage message = (ObjectMessage)consumer.receive();if (message != null) {String messageString = (String)message.getObject();System.out.println("Receive : " + messageString);}}}
?
看到console打印出:Receive : hello world...,可知接收到消息了,內流滿面啊啊啊啊。。。
?
關閉
查詢進程id(pid),禁止其進程:
ps -ef | grep activemq kill -9 pidps -ef | grep activemq kill -9 pid
?
再運行Sender,她就無法連接了,哈哈哈哈哈
Exception in thread "main" javax.jms.JMSException: Could not connect to broker URL: tcp://10.0.0.109:61616. Reason: java.net.ConnectException: Connection refused: connectException in thread "main" javax.jms.JMSException: Could not connect to broker URL: tcp://10.0.0.109:61616. Reason: java.net.ConnectException: Connection refused: connect
?
好了,基本的搭建告一段落。
?
荊棘
過程中,遇到一個小問題,就是我一開始是用JDK1.6去跑的,報出常見的Unsupported major.minor version 51.0
針對這個問題,這個帖子有很好的參考意義:
http://www.cnblogs.com/chinafine/articles/1935748.html
找出jar中的一個class,執行以下命令,可查出minor version、major version:
javap -verbose yourClassNamejavap -verbose yourClassName
?
或直接查看jar中的META-INF\MANIFEST.MF。
然后對照帖子中的JDK版本,換成JDK1.7就OK了。
總結
以上是生活随笔為你收集整理的ActiveMQ搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非常好用的两个PHP函数 seriali
- 下一篇: Shell-Scp自动输入密码