目录
1. ActiveMQ概述
2. ActiveMQ的安装
3. ActiveMQ的web页面账号密码控制和安全认证
1. ActiveMQ概述
定义: ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
主要实际应用场景:
①应用解耦,例如:假如B系统和C系统都依赖A系统中的某数据,需要A系统中的数据做业务的关联处理。在A系统中的该数据发生变化时,传统的模式可能会通过接口实现,A系统需要调用B系统的接口通知B系统,同时还要调用C系统提供的接口通知C系统等等,同时还要求B系统和C系统要在A系统调用时要正常运行,否则可能导致调用失败,随后又可能涉及到如果调用失败了需要执行什么操作,定义什么样的失败策略等一系列的问题,导致三个系统之间耦合度很大,强行关联在一块。这个时候就需要消息中间件出马。A系统吧数据都放到一个公共的地方,谁想使用这部分数据的自己去拿,A系统只管放里面,用不用什么时候用使用者自己去定义,A系统不管那么多。同时如果刚好某个B系统出现了问题,没关系可以等修复完正常后再去取消息处理业务逻辑即可。达到解耦的效果。使用消息中间件后系统之间的调用也无需考虑系统的运行平台,mq是能够进行跨语言的通信,达到解耦的功能。
②流量削峰。在秒杀系统中再瞬间会有大量的请求堆积过来,会导致服务器压力过大,造成页面卡顿甚至导致服务崩溃。使用中间件可以起到一个缓冲作用,将请求消息先缓冲起来,服务根据自身的吞吐能力处理消费,保证系统的稳定性。
③异步处理能力。对于一些非关键或者非要求及时性的数据调用记录,可以通过消息队列异步处理下提升系统的吞吐量。
2. ActiveMQ的安装
windows系统安装(linux也差不多,自行百度)
①下载地址:http://activemq.apache.org/components/classic/download/ 根据操作系统选择下载。这也是ActiveMQ的官网,里面也有相关的介绍文档,遇到问题后可以再官网上多找找
②安装
第一步:先安装JDK,因为ActiveMQ使用java开发的,所以必须安装JDK并配置相关的环境变量。
第二步:解压下载的文件
太详细的不说了,自己百度吧
③启动,windows下启动要到bin目录下根据自己的操作系统选择相应的目录进去,点击bat启动脚本。
④补充说明:启动后,默认web控制页面的端口为8161(可配置),web页面的访问ActiveMQ默认使用的是jetty服务器,web控制页面密码在配置文件的 jetty-realm.properties 文件中。控制页面是否需要密码登陆也是可配置的。默认是需要密码的。ActiveMQ支持多种协议,我们使用的openwire协议,协议默认端口61616,配置查看在ActiveMQ.xml中。其他的几个没理解过使用。有兴趣的同学可以自行百度。
3. ActiveMQ的web页面账号密码控制和安全认证
即web控制页面密码和broker密码。在楼主刚接触mq的时候一直以为这两个是一样的。但偶尔一次发现在项目中使用时即使密码错误也能连接上mq并正常发送接收消息,后来查资料才发现这两个的不同。汗颜。。。这里总结一下
web控制页面密码:账号密码在conf目录夹下的jetty-realm.properties 文件中,web控制页面主要显示mq的状态等等一些基本信息,方便我们监控。activemq的内嵌服务器是jetty,web页面就是放在jetty服务器中启动展示的。
jetty-realm.properties 中配置可以访问web控制页面的账号和密码 以及账号所属的角色
jetty.xml中配置web页面的认证,以及可以访问web控制页面的角色
安全认证密码:
两种方式
①ActiveMQ自带simpleAuthenticationPlugin插件
a. 在credentials.properties中添加账号和密码
b.在activemq.xml中添加配置文件,添加密码有下面两中方式
②使用JAASAuthentication Plugin
JAAS 全称为Java Authentication and Authorization Service JAVA认证授权服务,JAASAuthentication Plugin依赖标准的JAAS机制来实现认证,默认使用login.config文件作为配置
login.config文件中引用了users.properties来配置用户名密码,用groups.properties来配置用户所属的组
vi login.config
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
conf/users.properties # 用户名=密码 admin=admin
conf/groups.properties #用户组名=用户名,用户名 admins=admin,guest
在activemq.xml中配置生效 在<broker></broker>标签之间添加
<plugins>
<jaasAuthenticationPlugin configuration="activemq" />
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue="activemq.>" read="users" write="admins" admin="systems"/>
<authorizationEntry topic="USER.>" read="admins" write="admins" admin="admins"/>
<authorizationEntry queue=">" read="admins" write="admins" admin="admins"/>
<authorizationEntry topic=">" read="admins" write="admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
read读权限,write写权限,admin表示队列的删除创建等权限。例如
<authorizationEntry queue="activemq.>" read="users,admins" write="admins" admin="systems"/>
表示对于名称以activemq开头的队列,users组有读的权限(只能读,即只能消费,不能往队列写以及创建),admins组只有写的权限(不能读以及创建),systems操作权限(只能操作创建等权限,不能进行写和消费)。其中 topic=">" ,表示对于所有的topic。"activemq.>"中通配符前的点符号必须存在否则无法生效,也就是说前缀必须以点号结尾
> 也可用 * 替换。
其中<jaasAuthenticationPlugin configuration="activemq" /> 中的configuration的配置要与login.config文件中的配置对应上
read:可以从queue或者topic里面接收消息
write:可以向queue或者topic发送消息,
admin:可以创建queue或者topic(可能还有别的功能)