ActiveMQ安装和基本使用

来源:互联网 发布:python rsa 加密 编辑:程序博客网 时间:2024/05/21 18:38

ActiveMQ简介

ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE 1.4规范的JMSProvider实现的消息中间件(Message Oriented Middleware,MOM),最主要的功能就是:实现JMS Provider,用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统。

ActiveMQ安装和基本使用

1、 安装 JDK 并配置环境变量(略)

参考博客:Linux下安装jdk1.7

2、 下载 Linux 版的 最新版ActiveMQ,并上传到服务器

http://apache.fayea.com/activemq/

3、 解压安装

$ tar -zxvf apache-activemq-5.14.5-bin.tar.gz$ mv apache-activemq-5.14.5 activemq#如果启动脚本 activemq 没有可执行权限,此时则需要授权(此步可选)$ cd /usr/local/activemq/bin/$ chmod 755 ./activemq

4.打开防火墙端口

参考博客:Linux关闭防火墙

5.启动activemq

$ cd /usr/local/activemq/bin/$ ./activemq start

6.打开管理界面:http://172.20.1.205:8161 登录账号密码默认:admin/admin


7.安全配置(消息安全)

ActiveMQ 如果不加入安全机制的话,任何人只要知道消息服务的具体地址(包括 ip,端口,消息地址[队列或者主题地址],),都可以肆无忌惮的发送、接收消息。关于ActiveMQ 安装配置参考:http://activemq.apache.org/security.html
ActiveMQ 的消息安全配置策略有多种,我们以简单授权配置为例:
在 conf/activemq.xml 文件中在 broker 标签内的最后位置加入以下内容即可:
$ vi /usr/local/activemq/conf/activemq.xml<plugins><simpleAuthenticationPlugin><users><authenticationUser username="ryx" password="ryx" groups="users,admins"/></users></simpleAuthenticationPlugin></plugins>
定义了一个 ryx 用户,密码为 ryx,角色为 users,admins

设置登录用户 admin 的用户名和密码:
将authenticate 的值设为 true(默认)
$ vi /usr/local/activemq/conf/jetty.xml<bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint"><property name="name" value="BASIC" /><property name="roles" value="admin" /><property name="authenticate" value="true" /></bean>
控制台的登录用户名密码保存在 conf/jetty-realm.properties 文件中,内容如下:
$ vi /usr/local/activemq/conf/jetty-realm.properties# Defines users that can access the web (console, demo, etc.)# username: password [,rolename ...]admin: admin, adminuser: user, user
注意:用户名和密码的格式是
用户名 : 密码 ,角色名
重启:

/usr/local/activemq/bin/activemq restart

8.消息生产者也与消息消费者测试

Producer类

package com.ryx.test;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;public class Producer {public static void main(String[] args) throws Exception {//根据用户名,密码,url创建一个连接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("ryx", "ryx", "tcp://172.20.1.205:61616");//从工厂中获取一个连接Connection connection = connectionFactory.createConnection();connection.start();//第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED//第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。//Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。        //Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。        //DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//=======================================================================//创建一个到达的目的地(队列),如果这个队列不存在,将会被创建//点对点模式 session.createQueueDestination destination = session.createQueue("ryx.consumption.counting");//发布订阅模式//Destination destination = session.createTopic("ryx.consumption.counting");//=======================================================================//从session中,获取一个消息生产者MessageProducer producer = session.createProducer(destination);//设置生产者的模式,有两种可选        //DeliveryMode.PERSISTENT 当activemq关闭的时候,队列数据将会被保存        //DeliveryMode.NON_PERSISTENT 当activemq关闭的时候,队列里面的数据将会被清空producer.setDeliveryMode(DeliveryMode.PERSISTENT);//创建一条消息,当然,消息的类型有很多,如文字,字节,对象等,可以通过session.create..方法来创建出来TextMessage message = session.createTextMessage("这是一首简单的小情歌");Thread.sleep(1000);//通过消息生产者发出消息producer.send(message);session.commit();session.close();connection.close();}}

Consumer类

package com.ryx.test;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;public class Consumer {public static void main(String[] args) throws Exception {//根据用户名,密码,url创建一个连接工厂ConnectionFactory cf = new ActiveMQConnectionFactory("ryx", "ryx", "tcp://172.20.1.205:61616");//从工厂中获取一个连接Connection connection = cf.createConnection();connection.start();//第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED//第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。//Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。        //Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。        //DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//=======================================================================//创建一个到达的目的地(队列),如果这个队列不存在,将会被创建//点对点模式 session.createQueueDestination destination = session.createQueue("ryx.consumption.counting");//发布订阅模式//Destination destination = session.createTopic("ryx.consumption.counting");//=======================================================================//创建一个消费者MessageConsumer consumer = session.createConsumer(destination);Message message = consumer.receive();while(message!=null) {TextMessage txtMsg = (TextMessage)message;session.commit();System.out.println("收到消 息:" + txtMsg.getText());message = consumer.receive(1000L);}session.close();connection.close();}}



原创粉丝点击