ActiveMQ 部署及发送接收消息

一、           下载

下载地址:http://activemq.apache.org/ 我这里使用的版本为当前最新5.8.0。

下载版本有Windows和Linux两个版本,且都分为32位和64位。根据自己需要选择下载。

二、           安装

我这里下载的为windows的32位版本(apache-activemq-5.8.0-bin.zip),下载后直接解压到需要安装的目录或在直接解压到当前目录也可,解压完安装也完成。

解压后目录如上图,里面包含了示例和文档,及所有的jar包。

 

java 从 activemq 消费消息_System

三、           运行

进入到bin目录(apache-activemq-5.8.0\bin),双击activemq.bat,就会运行,运行截图如下:

java 从 activemq 消费消息_System_02

此时表示ActiveMQ已经在运行了,当然正常生产环境下可以设置作为服务在后台运行,并且随系统启动而启动。

四、           测试

ActiveMQ自带了一套管理系统,访问http://localhost:8161/admin/,会出现需要输入用户名和密码的页面如下:

java 从 activemq 消费消息_apache_03

默认用户名和密码都是admin,进入后则为主界面:

java 从 activemq 消费消息_java_04

在这个界面上,我们可以管理队列及其他的一些功能,为了下面的继续,我们在这里创建一个Queue和一个Topic。

java 从 activemq 消费消息_java_05

点击目录上的Queues进入创建Queue页面,输入Queue名称,点击Create后下面就创建了G2Queue的queue队列。

java 从 activemq 消费消息_java_06

这里也可以不用这样手工创建,在发送端指定了一个Queue或Topic名字后,会自动创建一个队列,如上面的choice.queue和FirstQueue都是我测试程序时,程序里面指定的Queue名称,自动创建的。

同样的方式创建一个Topic,如下:

java 从 activemq 消费消息_java_07

五、           发送消息

创建一个新的项目,我这里是创建的webproject名称为ActiveMQ,引入ActiveMQ的jar包,整个工程结构如下:

java 从 activemq 消费消息_apache_08

 

此段代码从网上直接copy,只是稍作修改:




[java]  view plain  copy



  1. import java.util.Random;  
  2.    
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.DeliveryMode;  
  6. import javax.jms.Destination;  
  7. import javax.jms.JMSException;  
  8. import javax.jms.MessageProducer;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11.    
  12. import org.apache.activemq.ActiveMQConnectionFactory;  
  13.    
  14. public class SendMessage {  
  15. private static final String url = "tcp://localhost:61616";  
  16. private static final String QUEUE_NAME = "G2Queue";  
  17.    
  18. public void sendMessage() throwsJMSException {  
  19. // JMS 客户端到JMSProvider 的连接  
  20. null;  
  21. try {  
  22. // 连接工厂,JMS 用它创建连接  
  23. // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar  
  24.            ConnectionFactory connectionFactory = newActiveMQConnectionFactory(url);  
  25.            connection = (Connection)connectionFactory.createConnection();  
  26. // 启动连接  
  27.            connection.start();  
  28. //Session:发送或接收消息的线程  
  29. // 获取session  
  30. false,  
  31.                   Session.AUTO_ACKNOWLEDGE);  
  32. // 消息的目的地,消息发送到那个队列  
  33.            Destination destination = session.createQueue(QUEUE_NAME);  
  34. //MessageProducer:消息发送者(生产者)  
  35. // 创建消息发送者  
  36.            MessageProducer producer =session.createProducer(destination);  
  37. // 设置是否持久化  
  38. //DeliveryMode.NON_PERSISTENT:不持久化  
  39. //DeliveryMode.PERSISTENT:持久化  
  40.            producer.setDeliveryMode(DeliveryMode.PERSISTENT);  
  41.             
  42. "";  
  43. int i = 0;  
  44. do {  
  45. "第"+i + "次发送的消息:"+new Random();  
  46.                 TextMessagemessage = session.createTextMessage(msg);  
  47. 1000);  
  48. // 发送消息到目的地方  
  49.                producer.send(message);  
  50. "发送消息:" +msg);  
  51.                 i++;  
  52. while (i<1000);  
  53. catch (Exception e) {  
  54.            e.printStackTrace();  
  55.        }  
  56.     }  
  57.    
  58. public static void main(String[] args) {  
  59.        SendMessage sndMsg = newSendMessage();  
  60. try {  
  61.            sndMsg.sendMessage();  
  62. catch (Exception ex) {  
  63.            System.out.println(ex.toString());  
  64.        }  
  65.     }  
  66. }  




运行结果如下:

java 从 activemq 消费消息_System_09

六、           接收消息



[java]  view plain  copy



  1. package cn.g2room.mq.test;  
  2.    
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.Message;  
  8. import javax.jms.MessageConsumer;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11.    
  12. import org.apache.activemq.ActiveMQConnectionFactory;  
  13.    
  14. /**
  15.  * 消息接收类
  16.  *
  17.  * @createTime:Apr 7, 2013 5:11:11 PM
  18.  * @author:<a href="mailto:252909344@qq.com">迷蝶</a>
  19.  * @version:0.1
  20.  *@lastVersion: 0.1
  21.  * @updateTime:
  22.  *@updateAuthor: <a href="mailto:252909344@qq.com">迷蝶</a>
  23.  * @changesSum:
  24.  *
  25.  */  
  26. public class ReceiveMessage {  
  27. final String url = "tcp://localhost:61616";  
  28. final String QUEUE_NAME = "G2Queue";  
  29.    
  30.          publicvoid receiveMessage() {  
  31. null;  
  32. try{  
  33. try{  
  34. new ActiveMQConnectionFactory(  
  35.                                                         url);  
  36.                                      connection= connectionFactory.createConnection();  
  37. catch (Exception e) {  
  38.                                      System.out.println(e.toString());  
  39.                             }  
  40.                             connection.start();  
  41. false,  
  42.                                                Session.AUTO_ACKNOWLEDGE);  
  43.                             Destinationdestination = session.createQueue(QUEUE_NAME);  
  44. //消息接收者,也就是消费者  
  45.                             MessageConsumerconsumer = session.createConsumer(destination);  
  46.                              
  47.                             consumeMessagesAndClose(connection,session, consumer);  
  48. catch (Exception e) {  
  49.                             System.out.println(e.toString());  
  50.                    }  
  51.          }  
  52. /**
  53.           * 接收和关闭消息,如遇到消息内容为close则,关闭连接
  54.           *
  55.           * @param connection   JMS 客户端到JMSProvider 的连接
  56.           * @param session                   发送或接收消息的线程
  57.           * @param consumer              消息接收对象
  58.           * @throws JMSException
  59.           * @auther <ahref="mailto:252909344@qq.com">迷蝶</a>
  60.           * Apr 8, 2013 10:31:55 AM
  61.           */  
  62.          protectedvoid consumeMessagesAndClose(Connection connection,  
  63. throws JMSException {  
  64. do{  
  65. 1000);  
  66. if("close".equals(message)){  
  67.                                      consumer.close();  
  68.                                      session.close();  
  69.                                      connection.close();  
  70.                             }  
  71. if(message != null) {  
  72.                                      onMessage(message);  
  73.                             }  
  74. while (true);  
  75.                     
  76.          }  
  77.    
  78.          publicvoid onMessage(Message message) {  
  79. try{  
  80. if(message instanceof TextMessage) {  
  81.                                      TextMessagetxtMsg = (TextMessage) message;  
  82.                                      Stringmsg = txtMsg.getText();  
  83. "Received:" + msg);  
  84.                             }  
  85. catch (Exception e) {  
  86.                             e.printStackTrace();  
  87.                    }  
  88.    
  89.          }  
  90.    
  91. void main(String args[]) {  
  92. new ReceiveMessage();  
  93.                    rm.receiveMessage();  
  94.          }  
  95. }  




运行结果如下:

 

java 从 activemq 消费消息_apache_10



0 踩


ActiveMQ 部署及发送接收消息

一、           下载

下载地址:http://activemq.apache.org/ 我这里使用的版本为当前最新5.8.0。

下载版本有Windows和Linux两个版本,且都分为32位和64位。根据自己需要选择下载。

二、           安装

我这里下载的为windows的32位版本(apache-activemq-5.8.0-bin.zip),下载后直接解压到需要安装的目录或在直接解压到当前目录也可,解压完安装也完成。

解压后目录如上图,里面包含了示例和文档,及所有的jar包。

 

java 从 activemq 消费消息_System

三、           运行

进入到bin目录(apache-activemq-5.8.0\bin),双击activemq.bat,就会运行,运行截图如下:

java 从 activemq 消费消息_System_02

此时表示ActiveMQ已经在运行了,当然正常生产环境下可以设置作为服务在后台运行,并且随系统启动而启动。

四、           测试

ActiveMQ自带了一套管理系统,访问http://localhost:8161/admin/,会出现需要输入用户名和密码的页面如下:

java 从 activemq 消费消息_apache_03

默认用户名和密码都是admin,进入后则为主界面:

java 从 activemq 消费消息_java_04

在这个界面上,我们可以管理队列及其他的一些功能,为了下面的继续,我们在这里创建一个Queue和一个Topic。

java 从 activemq 消费消息_java_05

点击目录上的Queues进入创建Queue页面,输入Queue名称,点击Create后下面就创建了G2Queue的queue队列。

java 从 activemq 消费消息_java_06

这里也可以不用这样手工创建,在发送端指定了一个Queue或Topic名字后,会自动创建一个队列,如上面的choice.queue和FirstQueue都是我测试程序时,程序里面指定的Queue名称,自动创建的。

同样的方式创建一个Topic,如下:

java 从 activemq 消费消息_java_07

五、           发送消息

创建一个新的项目,我这里是创建的webproject名称为ActiveMQ,引入ActiveMQ的jar包,整个工程结构如下:

java 从 activemq 消费消息_apache_08

 

此段代码从网上直接copy,只是稍作修改:




[java]  view plain  copy



  1. import java.util.Random;  
  2.    
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.DeliveryMode;  
  6. import javax.jms.Destination;  
  7. import javax.jms.JMSException;  
  8. import javax.jms.MessageProducer;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11.    
  12. import org.apache.activemq.ActiveMQConnectionFactory;  
  13.    
  14. public class SendMessage {  
  15. private static final String url = "tcp://localhost:61616";  
  16. private static final String QUEUE_NAME = "G2Queue";  
  17.    
  18. public void sendMessage() throwsJMSException {  
  19. // JMS 客户端到JMSProvider 的连接  
  20. null;  
  21. try {  
  22. // 连接工厂,JMS 用它创建连接  
  23. // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar  
  24.            ConnectionFactory connectionFactory = newActiveMQConnectionFactory(url);  
  25.            connection = (Connection)connectionFactory.createConnection();  
  26. // 启动连接  
  27.            connection.start();  
  28. //Session:发送或接收消息的线程  
  29. // 获取session  
  30. false,  
  31.                   Session.AUTO_ACKNOWLEDGE);  
  32. // 消息的目的地,消息发送到那个队列  
  33.            Destination destination = session.createQueue(QUEUE_NAME);  
  34. //MessageProducer:消息发送者(生产者)  
  35. // 创建消息发送者  
  36.            MessageProducer producer =session.createProducer(destination);  
  37. // 设置是否持久化  
  38. //DeliveryMode.NON_PERSISTENT:不持久化  
  39. //DeliveryMode.PERSISTENT:持久化  
  40.            producer.setDeliveryMode(DeliveryMode.PERSISTENT);  
  41.             
  42. "";  
  43. int i = 0;  
  44. do {  
  45. "第"+i + "次发送的消息:"+new Random();  
  46.                 TextMessagemessage = session.createTextMessage(msg);  
  47. 1000);  
  48. // 发送消息到目的地方  
  49.                producer.send(message);  
  50. "发送消息:" +msg);  
  51.                 i++;  
  52. while (i<1000);  
  53. catch (Exception e) {  
  54.            e.printStackTrace();  
  55.        }  
  56.     }  
  57.    
  58. public static void main(String[] args) {  
  59.        SendMessage sndMsg = newSendMessage();  
  60. try {  
  61.            sndMsg.sendMessage();  
  62. catch (Exception ex) {  
  63.            System.out.println(ex.toString());  
  64.        }  
  65.     }  
  66. }  




运行结果如下:

java 从 activemq 消费消息_System_09

六、           接收消息



[java]  view plain  copy



  1. package cn.g2room.mq.test;  
  2.    
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.Message;  
  8. import javax.jms.MessageConsumer;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11.    
  12. import org.apache.activemq.ActiveMQConnectionFactory;  
  13.    
  14. /**
  15.  * 消息接收类
  16.  *
  17.  * @createTime:Apr 7, 2013 5:11:11 PM
  18.  * @author:<a href="mailto:252909344@qq.com">迷蝶</a>
  19.  * @version:0.1
  20.  *@lastVersion: 0.1
  21.  * @updateTime:
  22.  *@updateAuthor: <a href="mailto:252909344@qq.com">迷蝶</a>
  23.  * @changesSum:
  24.  *
  25.  */  
  26. public class ReceiveMessage {  
  27. final String url = "tcp://localhost:61616";  
  28. final String QUEUE_NAME = "G2Queue";  
  29.    
  30.          publicvoid receiveMessage() {  
  31. null;  
  32. try{  
  33. try{  
  34. new ActiveMQConnectionFactory(  
  35.                                                         url);  
  36.                                      connection= connectionFactory.createConnection();  
  37. catch (Exception e) {  
  38.                                      System.out.println(e.toString());  
  39.                             }  
  40.                             connection.start();  
  41. false,  
  42.                                                Session.AUTO_ACKNOWLEDGE);  
  43.                             Destinationdestination = session.createQueue(QUEUE_NAME);  
  44. //消息接收者,也就是消费者  
  45.                             MessageConsumerconsumer = session.createConsumer(destination);  
  46.                              
  47.                             consumeMessagesAndClose(connection,session, consumer);  
  48. catch (Exception e) {  
  49.                             System.out.println(e.toString());  
  50.                    }  
  51.          }  
  52. /**
  53.           * 接收和关闭消息,如遇到消息内容为close则,关闭连接
  54.           *
  55.           * @param connection   JMS 客户端到JMSProvider 的连接
  56.           * @param session                   发送或接收消息的线程
  57.           * @param consumer              消息接收对象
  58.           * @throws JMSException
  59.           * @auther <ahref="mailto:252909344@qq.com">迷蝶</a>
  60.           * Apr 8, 2013 10:31:55 AM
  61.           */  
  62.          protectedvoid consumeMessagesAndClose(Connection connection,  
  63. throws JMSException {  
  64. do{  
  65. 1000);  
  66. if("close".equals(message)){  
  67.                                      consumer.close();  
  68.                                      session.close();  
  69.                                      connection.close();  
  70.                             }  
  71. if(message != null) {  
  72.                                      onMessage(message);  
  73.                             }  
  74. while (true);  
  75.                     
  76.          }  
  77.    
  78.          publicvoid onMessage(Message message) {  
  79. try{  
  80. if(message instanceof TextMessage) {  
  81.                                      TextMessagetxtMsg = (TextMessage) message;  
  82.                                      Stringmsg = txtMsg.getText();  
  83. "Received:" + msg);  
  84.                             }  
  85. catch (Exception e) {  
  86.                             e.printStackTrace();  
  87.                    }  
  88.    
  89.          }  
  90.    
  91. void main(String args[]) {  
  92. new ReceiveMessage();  
  93.                    rm.receiveMessage();  
  94.          }  
  95. }  




运行结果如下:

 

java 从 activemq 消费消息_apache_10