Active MQ 消息队列
1、前言
MQ是消息中间件
,是一种在分布式系统
中应用程序
借以传递消息
的媒介
,常用的有ActiveMQ,RabbitMQ,kafka。
2、Active MQ简介
ActiveMQ
是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ
是一个完全支持JMS1.1
和J2EE 1.4
规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
官网:http://activemq.apache.org/
特点:
- 支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议
- 完全支持JMS客户端和Message Broker中的企业集成模式
- 支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
- 完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息
- Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
- 专为高性能集群,客户端 - 服务器,基于对等的通信而设计
- 支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输
- 使用JDBC和高性能日志支持非常快速的持久性
- 支持AJAX
ActiveMQ消息形式:topic(非安全的),queue(安全的)
topic和queue区别:
- topic:不安全 、没有状态的、一对多 、数据容易丢失的、传输速率高。
- queue:安全、有状态的、一对一、数据不容易丢失的、传输速率低。
工作流程:
a用户把消息发送到mq的消息池里,mq负责接受这条消息,如果接到消息了,把连接断开了。mq有一个监控的功能,监控b用户是否上线。如果b用户上线了,把a用户的消息发送给b用户。b用户会把消息的返回值告诉连接池,完了b用户和连接池就断开了。mq接受到了b用户给它的返回值。(a用户只是把消息发过去了,还没有接收到信息 )连接池时刻监视a用户是否在线,如果a用户上线了再把返回值发送给a用户。发送完成之后连接断开了。
topic消息形式工作流程: 首先用户a把发送消息到消息池里, mq会存放你的消息,监控到b用户上线,将这条消息发过去。发送过去后,mq会把这条消息删掉,(如果b在返回的时候断掉了,那消息就丢了)。如果返回没断监控a用户上线,把消息返回给a。
queue消息形式工作流程: 首先用户a把发送消息到消息池里, mq会存放你的消息,监控到b用户上线,将这条消息发过去。发送过去后,mq不会把这条消息删掉,会一直保留消息池里。当把消息给b,b接收到消息。mq接收到b的返回值,mq把b的返回值给a之后,才会把这个消息删掉。
3、Active MQ单点部署
1.ActiveMQ需要JDK支持
$ yum install java-1.8.0-openjdk*
$ java -version
2.下载
http://activemq.apache.org/download.html
3.解压安装
$ tar xf apache-activemq-5.15.10-bin.tar.gz
$ mv apache-activemq-5.15.10 /usr/local/
$ ln -s /usr/local/apache-activemq-5.15.10/ /usr/local/activemq
4.设置环境变量
$ vim vim /etc/profile
export ACTIVEMQ_HOME=/usr/local/activemq
export PATH=$PATH:$ACTIVEMQ_HOME/bin
$ source /etc/profile
5.配置
$ vim /usr/local/activemq/conf/activemq.xml
# 客户端参数默认值: 监听端口 61616, 最大连接数 1000, 最大消息 100M
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFr
ameSize=104857600"/>
6.启动
$ activemq start
$ netstat -lntup |grep -E "6161*|8161"
tcp6 0 0 :::61613 :::* LISTEN 11674/java
tcp6 0 0 :::61614 :::* LISTEN 11674/java
tcp6 0 0 :::61616 :::* LISTEN 11674/java
tcp6 0 0 :::8161 :::* LISTEN 11674/java
# 8161 是管理端口
7.浏览器访问管理
# 浏览器打开: http://ip:8161/admin
# 用户名/密码: admin/admin(可以在 conf/users.properties 中修改)