Active MQ 消息队列

1、前言

MQ是消息中间件,是一种在分布式系统应用程序借以传递消息媒介,常用的有ActiveMQ,RabbitMQ,kafka。

2、Active MQ简介

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1J2EE 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&amp;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 中修改)

posted @ 2020-04-02 07:05  jasonminghao  阅读(454)  评论(0编辑  收藏  举报