activeMQ 安装、应用、安全认证、持久化

 

1、 ActiveMQ安装java

 

1 下载资源mysql

ActiveMQ官网: http://activemq.apache.orgspring

 

 

 

 

 

1.1 版本说明sql

ActiveMQ5.10.x以上版本必须使用JDK1.8才能正常使用。数据库

ActiveMQ5.9.x及如下版本使用JDK1.7便可正常使用。apache

 

2 上传至Linux服务器浏览器

 

3 解压安装文件缓存

tar -zxf apache-activemq-5.9.0-bin.tar.gztomcat

 

4 检查权限安全

ls -al apache-activemq-5.9.0/bin

若是权限不足,则没法执行,须要修改文件权限:

chmod 755 activemq

 

5 复制应用至本地目录

cp -r apache-activemq-5.9.0 /usr/local/activemq

 

6 配置文件简介

/usr/local/activemq/conf/* - 配置文件.

须要关注的配置文件有: activemq.xml, jetty.xml, users.properties

任何配置文件修改后,必须重启ActiveMQ,才能生效.

 

6.1 activemq.xml

就是spring配置文件. 其中配置的是ActiveMQ应用使用的默认对象组件.

transportConnectors标签 - 配置连接端口信息的. 其中的端口号61616是ActiveMQ对外发布的tcp协议访问端口. 就是java代码访问ActiveMQ时使用的端口.

 

6.2 jetty.xml

spring配置文件, 用于配置jetty服务器的默认对象组件.

jetty是相似tomcat的一个中间件容器.

ActiveMQ默认支持一个网页版的服务查看站点. 能够实现ActiveMQ中消息相关数据的页面查看.

8161端口, 是ActiveMQ网页版管理站点的默认端口.

在ActiveMQ网页版管理站点中,须要登陆, 默认的用户名和密码都是admin.

 

6.3 users.properties

内容信息: 用户名=密码

是用于配置客户端经过协议访问ActiveMQ时,使用的用户名和密码.

 

7 启动ActiveMQ

/usr/local/activemq/bin/activemq start

 

8 测试ActiveMQ

 

8.1 检查进程

ps aux | grep activemq

见到下述内容即表明启动成功

 

 

 

8.2 管理界面

使用浏览器访问ActiveMQ管理应用, 地址以下:

http://ip:8161/admin/

用户名: admin

密码: admin

ActiveMQ使用的是jetty提供HTTP服务.启动稍慢,建议短暂等待再访问测试.

见到以下界面表明服务启动成功

 

 

 

8.3 修改访问端口

修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml

 

 

配置文件修改完毕,保存并从新启动ActiveMQ服务。

 

9 重启ActiveMQ

/usr/local/activemq/bin/activemq restart

 

10 关闭ActiveMQ

/usr/local/activemq/bin/activemq stop

 

2、 ActiveMQ应用

 

1 PTP处理模式(Queue)

消息生产者生产消息发送到queue中,而后消息消费者从queue中取出而且消费消息。

消息被消费之后,queue中再也不有存储,因此消息消费者不可能消费到已经被消费的消息。

Queue支持存在多个消费者,可是对一个消息而言,只会有一个消费者能够消费、其它的则不能消费此消息了。

当消费者不存在时,消息会一直保存,直到有消费消费

 

 

2 Publish/Subscribe处理模式(Topic)

消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。

和点对点方式不一样,发布到topic的消息会被全部订阅者消费。

当生产者发布消息,不论是否有消费者。都不会保存消息

必定要先有消息的消费者,后有消息的生产者。

 

3 PTP和PUB/SUB简单对比

 

3、 ActiveMQ安全认证

ActiveMQ也提供了安全认证。就是用户名密码登陆规则。ActiveMQ若是须要使用安全认证的话,必须在activemq的核心配置文件中开启安全配置。配置文件就是conf/activemq.xml

在conf/activemq.xml配置文件的broker标签中增长下述内容。

<jaasAuthenticationPlugin configuration="activemq" />指定了使用JAAS插件管理权限,至于configuration="activemq"是在login.conf文件里定义的

<authorizationEntry topic="名字" read="用户组名" write="用户组名" admin="用户组名" />指定了具体的Topic/Queue与用户组的受权关系

<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>这个是必须的配置,不能少

开启认证后,认证使用的用户信息由其余配置文件提供。

conf/login.config

user表明用户信息配置文件,group表明用户组信息配置文件。寻址路径为相对当前配置文件所在位置开始寻址。

 

4、 ActiveMQ的持久化

ActiveMQ中,持久化是指对消息数据的持久化。在ActiveMQ中,默认的消息是保存在内存中的。当内存容量不足的时候,或ActiveMQ正常关闭的时候,会将内存中的未处理的消息持久化到磁盘中。具体的持久化策略由配置文件中的具体配置决定。

ActiveMQ的默认存储策略是kahadb。若是使用JDBC做为持久化策略,则会将全部的须要持久化的消息保存到数据库中。

全部的持久化配置都在conf/activemq.xml中配置,配置信息都在broker标签内部定义。

 

1 kahadb方式

是ActiveMQ默认的持久化策略。kahadb是一个文件型数据库。是使用内存+文件保证数据的持久化的。kahadb能够限制每一个数据文件的大小。不表明总计数据容量。

特性是:一、日志形式存储消息;二、消息索引以B-Tree结构存储,能够快速更新;三、彻底支持JMS事务;四、支持多种恢复机制;

 

2 AMQ方式

只适用于5.3版本以前。

AMQ也是一个文件型数据库,消息信息最终是存储在文件中。内存中也会有缓存数据。

性能高于JDBC,写入消息时,会将消息写入日志文件,因为是顺序追加写,性能很高。为了提高性能,建立消息主键索引,而且提供缓存机制,进一步提高性能。每一个日志文件的大小都是有限制的(默认32m,可自行配置)。

当超过这个大小,系统会从新创建一个文件。当全部的消息都消费完成,系统会删除这个文件或者归档。

主要的缺点是AMQ Message会为每个Destination建立一个索引,若是使用了大量的Queue,索引文件的大小会占用不少磁盘空间。

并且因为索引巨大,一旦Broker(ActiveMQ应用实例)崩溃,重建索引的速度会很是慢。

虽然AMQ性能略高于Kaha DB方式,可是因为其重建索引时间过长,并且索引文件占用磁盘空间过大,因此已经不推荐使用。

 

3 JDBC持久化方式

ActiveMQ将数据持久化到数据库中。 不指定具体的数据库。 可使用任意的数据库中。 本环节中使用MySQL数据库。

下述文件为activemq.xml配置文件部份内容。不要彻底复制。

首先定义一个mysql-ds的MySQL数据源,而后在persistenceAdapter节点中配置jdbcPersistenceAdapter而且引用刚才定义的数据源。

dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候建立数据表,默认值是true,这样每次启动都会去建立数据表了,通常是第一次启动的时候设置为true,以后改为false。

配置成功后,须要在数据库中建立对应的database,不然没法访问。表格ActiveMQ能够自动建立。

activemq_msgs用于存储消息,Queue和Topic都存储在这个表中:

ID:自增的数据库主键

CONTAINER:消息的Destination

MSGID_PROD:消息发送者客户端的主键

MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ能够组成JMS的MessageID

EXPIRATION:消息的过时时间,存储的是从1970-01-01到如今的毫秒数

MSG:消息本体的Java序列化对象的二进制数据

PRIORITY:优先级,从0-9,数值越大优先级越高

activemq_acks用于存储订阅关系。若是是持久化Topic,订阅者和服务器的订阅关系在这个表保存:

主要的数据库字段以下:

CONTAINER:消息的Destination

SUB_DEST:若是是使用Static集群,这个字段会有集群其余系统的信息

CLIENT_ID:每一个订阅者都必须有一个惟一的客户端ID用以区分

SUB_NAME:订阅者名称

SELECTOR:选择器,能够选择只消费知足条件的消息。条件能够用自定义属性实现,可支持多属性AND和OR操做

LAST_ACKED_ID:记录消费过的消息的ID。

表activemq_lock在集群环境中才有用,只有一个Broker能够得到消息,称为Master Broker,

其余的只能做为备份等待Master Broker不可用,才可能成为下一个Master Broker。 这个表用于记录哪一个Broker是当前的Master Broker。

只有在消息必须保证有效,且绝对不能丢失的时候。使用JDBC存储策略。

若是消息能够容忍丢失,或使用集群/主备模式保证数据安全的时候,建议使用levelDB或Kahadb。

相关文章
相关标签/搜索