ActiveMQ 是Apache出品的最流行的,能力强劲的开源消息总线JMS(Java Message Service)。ActiveMQ有两种消息处理模式Topic和Queue。以下均已linux环境为例
一、 Topic和Queue介绍
|
Topic |
Queue |
概要 |
Publish Subscribe messaging 发布订阅消息 |
Point-to-Point 点对点 |
有无状态 |
Topic数据默认不落地,是无状态的 |
Queue数据默认会在mq服务器上以文件形式保存,比如Active MQ一般保存在$AMQ_HOME\data\kr-store\data下面。也可以配置成DB存储 |
完整性保障 |
并不保证publisher发布的每条数据,Subscriber都能接收到 |
Queue保证每条数据都能被receiver接收 |
消息是否会丢失 |
一般来说publisher发布消息到某一个topic时,只有正在监听该topic地址的sub能够接收到消息;如果没有sub在监听,该topic就丢失了 |
Sender发送消息到目标Queue,receiver可以异步接收这个Queue上的消息。Queue上的消息如果暂时没有receiver来取,也不会丢失。 |
消息发布接收策略 |
一对多的消息发布接收策略,监听同一个topic地址的多个sub都能收到publisher发送的消息。Sub接收完通知mq服务器 |
一对一的消息发布接收策略,一个sender发送的消息,只能有一个receiver接收。receiver接收完后,通知mq服务器已接收,mq服务器对queue里的消息采取删除或其他操作 |
Topic和Queue的最大区别在于Topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而Queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。
二、下载和安装ActiveMQ
1、下载
ActiveMQ的最新版本是5.13.1,下载地址:http://activemq.apache.org/activemq-5131-release.html。
2、安装
解压下载的apache-activemq-5.13.1-bin.tar.gz包,ActiveMQ的默认服务端口:61616、默认console端口:8161。
3、运行命令
bin目录下执行./activemq start/stop/restart命令分别表示启动/停止/重启
4、修改ActiveMQ的服务端口和console端口
A、修改服务地址和端口:打开conf/activemq.xml文件,找到如下部分,修改红色部分即可:
<transportConnectorname="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
B、修改console地址和端口:打开conf/jetty.xml文件,找到如下部分,修改红色部分即可:
<beanid="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start">
<!-- the default port number forthe web console -->
<property name="host"value="0.0.0.0"/>
<property name="port"value="8161"/>
</bean>
5、修改ActiveMQ的console和broker密码
A、console密码修改
找到conf/jetty-realm.properties文件
默认admin: admin, admin(用户名:密码,角色)
改为admin: 修改后的密码, admin
B、broker密码修改
1)找到conf/credentials.properties文件
用户名:activemq.username=system
密码:activemq.password=manager
2)找到conf/activemq.xml
在transportConnectors标签上添加以下代码:
<plugins>
<!-- Configure authentication; Username, passwords and groups -->
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
三、测试Acti