ActiveMQ安装配置 和 使用简例

来源:互联网 发布:如何预防网络电信诈骗 编辑:程序博客网 时间:2024/06/05 08:35

JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,ActiveMQ而是这个规范的一个具体实现。

JMS的队列消息传递过程如下图:

JMS的主题消息传递过程如下图:

ActiveMQ下载与部署。

1、  下载

到官网下载最新版本,有windows版本和linux版本的。

http://activemq.apache.org/download.html


windows版本:apache-activemq-5.10-20140603.133406-78-bin.zip

linux版本:apache-activemq-5.10-20140603.133406-78-bin.tar.gz

 

2、  部署

A、 windows下部署

ActiveMQ部署其实很简单,和所有Java一样,要跑java程序就必须先安装JDK并配置好环境变量,这个很简单。

然后解压下载的apache-activemq-5.10-20140603.133406-78-bin.zip压缩包到一个目录,得到解压后的目录结构如下图:

进入bin目录,发现有win32和win64两个文件夹,这2个文件夹分别对应windows32位和windows64位操作系统的启动脚本。

我的实验环境是windowsXP,就进入win32目录,会看到如下目录结构。

其中activemq.bat便是启动脚本,双击启动。

ActiveMQ默认启动到8161端口,启动完了后在浏览器地址栏输入:http://localhost:8161/admin要求输入用户名密码,默认用户名密码为admin、admin,这个用户名密码是在conf/users.properties中配置的。输入用户名密码后便可看到如下图的ActiveMQ控制台界面了。





ActiveMQ默认绑定本地端口61616,如果一切顺利,启动ActiveMQ成功后,可以执行命令:

[plain] view plain copy
  1. netstat -an|find "61616"  

查看到端口61616的状态如图:


表明ActiveMQ消息服务器端启动已经成功,已经在端口61616收发消息。

(3)下面就可以使用ActiveMQ在自己的Java程序中编写代码收发消息。以两个java应用程序为例,一个单独的Sender.java作为消息的发送方,另外一个Receiver.java作为消息的接收方。

Sender.java

[java] view plain copy
  1. import javax.jms.Connection;  
  2. import javax.jms.ConnectionFactory;  
  3. import javax.jms.DeliveryMode;  
  4. import javax.jms.Destination;  
  5. import javax.jms.JMSException;  
  6. import javax.jms.MessageProducer;  
  7. import javax.jms.Session;  
  8. import javax.jms.TextMessage;  
  9. import org.apache.activemq.ActiveMQConnection;  
  10. import org.apache.activemq.ActiveMQConnectionFactory;  
  11.   
  12. public class Sender {  
  13.   
  14.     //标明一个消息队列。  
  15.     private static  final   String  MESSAGE_QUEUE="zhangphil";  
  16.       
  17.     //默认的ActiveMQ服务器端绑定的端口。  
  18.     private static  final   int PORT=61616;  
  19.       
  20.     //发送10条消息。  
  21.     private static final int COUNT = 10;  
  22.   
  23.     public static void main(String[] args) {  
  24.           
  25.         // ConnectionFactory :连接工厂,JMS 创建连接  
  26.         ConnectionFactory connectionFactory;  
  27.           
  28.         // Connection :JMS 客户端到JMS Provider 的连接  
  29.         Connection connection = null;  
  30.           
  31.         // Session: 一个发送或接收消息的线程  
  32.         Session session;  
  33.           
  34.         // Destination :消息的目的地  
  35.         Destination destination;  
  36.           
  37.         // MessageProducer:消息生产者。  
  38.         MessageProducer producer;  
  39.           
  40.         // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar  
  41.         connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:"+PORT);  
  42.           
  43.         try {  
  44.             // 构造从工厂得到连接对象  
  45.             connection = connectionFactory.createConnection();  
  46.               
  47.             // 启动  
  48.             connection.start();  
  49.               
  50.             // 获取操作连接  
  51.             session = connection.createSession(Boolean.TRUE.booleanValue(), Session.AUTO_ACKNOWLEDGE);  
  52.               
  53.             // 获取session注意参数值 zhangphil 是一个服务器的queue,须在在ActiveMq的console配置  
  54.             destination = session.createQueue(MESSAGE_QUEUE);  
  55.               
  56.             // 得到消息生成者,发送者  
  57.             producer = session.createProducer(destination);  
  58.               
  59.             // 设置不持久化  
  60.             producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
  61.               
  62.             // 发送消息。  
  63.             sendMessage(session, producer);  
  64.               
  65.             session.commit();  
  66.               
  67.         } catch (Exception e) {  
  68.             e.printStackTrace();  
  69.         } finally {  
  70.             try {  
  71.                 if (null != connection)  
  72.                     connection.close();  
  73.             } catch (Throwable ignore) {  
  74.             }  
  75.         }  
  76.     }  
  77.   
  78.     public static void sendMessage(Session session, MessageProducer producer){  
  79.         for (int i = 0; i <COUNT; i++) {  
  80.   
  81.             TextMessage message = null;  
  82.             try {  
  83.                 message = session.createTextMessage("zhangphil message "+i);  
  84.             } catch (JMSException e) {  
  85.                 e.printStackTrace();  
  86.             }  
  87.       
  88.             // 发送消息到目的地方  
  89.             try {  
  90.                 producer.send(message);  
  91.                 System.out.println("发送消息:"+message.getText());  
  92.             } catch (JMSException e) {  
  93.                 e.printStackTrace();  
  94.             }  
  95.         }  
  96.     }  
  97. }  


Receiver.java

[java] view plain copy
  1. import javax.jms.Connection;  
  2. import javax.jms.ConnectionFactory;  
  3. import javax.jms.Destination;  
  4. import javax.jms.MessageConsumer;  
  5. import javax.jms.Session;  
  6. import javax.jms.TextMessage;  
  7. import org.apache.activemq.ActiveMQConnection;  
  8. import org.apache.activemq.ActiveMQConnectionFactory;  
  9.   
  10.   
  11. public class Receiver {  
  12.       
  13.     private static  final   String  MESSAGE_QUEUE="zhangphil";  
  14.     private final static    int PORT=61616;  
  15.       
  16.     public static void main(String[] args) {  
  17.           
  18.         // ConnectionFactory :连接工厂,JMS 用它创建连接  
  19.         ConnectionFactory connectionFactory;  
  20.           
  21.         // Connection :JMS 客户端到JMS Provider 的连接  
  22.         Connection connection = null;  
  23.           
  24.         // Session: 一个发送或接收消息的线程  
  25.         Session session;  
  26.           
  27.         // Destination :消息的目的地;消息发送给谁.  
  28.         Destination destination;  
  29.           
  30.         // 消息接收者  
  31.         MessageConsumer consumer;  
  32.           
  33.         connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:"+PORT);  
  34.           
  35.         try {  
  36.             // 构造从工厂得到连接对象  
  37.             connection = connectionFactory.createConnection();  
  38.               
  39.             // 启动  
  40.             connection.start();  
  41.               
  42.             // 获取操作连接  
  43.             session = connection.createSession(Boolean.FALSE.booleanValue(), Session.AUTO_ACKNOWLEDGE);  
  44.               
  45.             // 获取session注意参数值 zhangphil 是一个服务器的queue,只接受相同message queue字段的消息。  
  46.             destination = session.createQueue(MESSAGE_QUEUE);  
  47.               
  48.             consumer = session.createConsumer(destination);  
  49.               
  50.             while (true) {  
  51.                 TextMessage message = (TextMessage) consumer.receive(1000);  
  52.                   
  53.                 if (null != message) {  
  54.                     System.out.println("收到消息: " + message.getText());  
  55.                 } else {  
  56.                     //如果不break,receiver将轮询接收消息。  
  57.                     //break,Receiver.java退出。  
  58.                     //break;  
  59.                 }  
  60.             }  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         } finally {  
  64.             try {  
  65.                 if (null != connection)  
  66.                     connection.close();  
  67.             } catch (Throwable ignore) {  
  68.             }  
  69.         }  
  70.     }  
  71. }  

编译上述两个java文件,需要导入ActiveMQ的jar库包。将(2)中的…\apache-activemq-5.12.0-bin\apache-activemq-5.12.0\activemq-all-5.12.0.jar作为库包导入进来。


ActiveMQ的基本配置

ActiveMQ默认的系统配置网页是: http://localhost:8161/admin/
用户名和密码默认均是: admin


原创粉丝点击