ActiveMQ使用详解
一、消息中间件的介绍
介绍
消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。
特点(作用)
- 应用解耦
- 异步通信
- 流量削峰
- (海量)日志处理
- 消息通讯
应用场景
根据消息队列的特点,可以衍生出很多场景,或者说很多场景都能用到。下面举几个例子:
1)异步通信
注册时的短信、邮件通知,减少响应时间;
2)应用解耦
信息发送者和消息接受者无需耦合,比如调用第三方;
3)流量削峰
例如秒杀系统;
二、消息中间件的对比
1.ActiveMQ
简介:
ActiveMQ 是Apache出品,纯Java开发,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS(Java消息服务)规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
特点:
-
支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议
-
完全支持JMS(Java消息服务)客户端和Message Broker中的企业集成模式
-
支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
-
完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息
-
Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
-
专为高性能集群,客户端 - 服务器,基于对等的通信而设计
-
CXF和Axis支持,以便ActiveMQ可以轻松地放入这些Web服务堆栈中以提供可靠的消息传递
-
可以用作内存JMS提供程序,非常适合单元测试JMS(Java消息服务)
-
支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输
-
使用JDBC和高性能日志支持非常快速的持久性
2.RabbitMQ
简介:
RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ轻巧且易于部署在云端。 它支持多种消息传递协议。 RabbitMQ可以部署在分布式和联合配置中,以满足高规模,高可用性需求。RabbitMQ可运行在许多操作系统和云环境中,并为大多数流行语言提供广泛的开发工具。(来自官网翻译)
AMQP (Advanced MessageQueue):高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。
RabbitMQ最初广泛应用于金融行业,根据官网描述,它具有如下特点:
特点:
- 异步消息传递:支持多种消息协议,消息队列,传送确认,灵活的路由到队列,多种交换类型;
- 支持几乎所有最受欢迎的编程语言:Java,C,C ++,C#,Ruby,Perl,Python,PHP等等;
- 可以部署为高可用性和吞吐量的集群; 跨多个可用区域和区域进行联合;
- 可插入的身份验证,授权,支持TLS和LDAP。;
- 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面;
- 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。
3. Kafka
简介:
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Kafka它主要用于处理活跃的流式数据,因此Kafaka在大数据系统中使用较多。
特点:
-
同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。
-
可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。
-
分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。
-
消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。
-
支持online和offline的场景。
4. RocketMQ
简介:
RocketMQ是阿里开源的消息中间件,目前在Apache孵化,使用纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,支撑了阿里多次双十一活动。
特点:
- 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
- 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
- 支持拉(pull)和推(push)两种消息模式
- 单一队列百万消息的堆积能力
- 支持多种消息协议,如 JMS、MQTT 等
- 分布式高可用的部署架构,满足至少一次消息传递语义
- 提供 docker 镜像用于隔离测试和云集群部署
- 提供配置、指标和监控等功能丰富的 Dashboard
三、ActiveMQ的安装
这里以apache-activemq-5.15.13-bin(window版本)为例
1.下载解压
2.启动运行
在此目录下 cmd
输入启动命令:
bin\activemq start
3.测试安装
- 打开管理界面
- 网址:http://localhost:8161/admin
- 登录:admin
- 密码:admin
- 导航到“队列”
- 添加队列名称,然后单击“创建”
- 通过点击“发送到”发送测试消息
1)Queues界面介绍
Name:消息队列的名称。
Number Of Pending Messages:未被消费的消息数目。
Number Of Consumers:消费者的数量。
Messages Enqueued:进入队列的消息 ;进入队列的总消息数目,包括已经被消费的和未被消费的。 这个数量只增不减。
Messages Dequeued:出了队列的消息,可以理解为是被消费掉的消息数量。在Queues里它和进入队列的总数量相等(因为一个消息只会被成功消费一次),如果暂时不等是因为消费者还没来得及消费。
2)Topics主题页面
Name:主题名称。
Number Of Pending Messages:未被消费的消息数目。
Number Of Consumers:消费者的数量。
Messages Enqueued:进入队列的消息 ;进入队列的总消息数目,包括已经被消费的和未被消费的。 这个数量只增不减。
Messages Dequeued:出了队列的消息,可以理解为是被消费掉的消息数量。在Topics里,因为多消费者从而导致数量会比入队列数高。
3)Subscribers查看订阅者界面
查看订阅者信息,只在Topics消息类型中这个页面才会有数据。
4)Connections查看连接数页面
4.创建消息
选择 队列(Queues),输入名称点击【创建】
5.发送消息
选择消息中的 【发送】进入编辑框
输入消息体(发送的内容)
6.日志文件和控制台输出
日志文件在:data/activemq.log
7.停止activeMQ
进入bin目录
输入命令:activemq stop