如何优雅的学会activeMQ 安装、应用、安全认证、持久化

 

一、 ActiveMQ安装

 

1 下载资源

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

 

1.1 版本说明

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

ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。

 

2 上传至Linux服务器

 

3 解压安装文件

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

 

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

 

二、 ActiveMQ应用

 

1 PTP处理模式(Queue)

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

消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。

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

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

 

2 Publish/Subscribe处理模式(Topic)

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

和点对点方式不同,发布到topic的消息会被所有订阅者消费。

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

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

 

3 PTP和PUB/SUB简单对比

 

三、 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代表用户组信息配置文件。寻址路径为相对当前配置文件所在位置开始寻址。

 

四、 ActiveMQ的持久化

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

ActiveMQ的默认存储策略是kahadb。如果使用JDBC作为持久化策略,则会将所有的需要持久化的消息保存到数据库中。

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

 

1 kahadb方式

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

特性是:1、日志形式存储消息;2、消息索引以B-Tree结构存储,可以快速更新;3、完全支持JMS事务;4、支持多种恢复机制;

 

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。

猜你喜欢

转载自blog.csdn.net/Assdqd/article/details/88056160