如何优雅的学会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,订阅者和服务器的订阅关系在这个表保存:

  主要的数据库字段如下

  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。

 

转载地址:http://dy.163.com/v2/article/detail/E96HJ8O205311RRU.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值