什么是消息队列 MQ?
这里摘抄阿里云RocketMQ 的一段话,详情请看阿里云官方文档,写的非常不错,这里附上链接:
https://www.alibabacloud.com/help/zh/doc-detail/29532.htm?spm=a2c63.p38356.b99.2.38567c62R1BFHD
消息队列 RocketMQ 是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集群技术,提供消息订阅和发布、消息轨迹查询以及定时(延时)消息、资源统计、监控报警等一系列消息云服务,是企业级互联网架构的核心产品。 消息队列 RocketMQ 历史超过9年,为分布式应用系统提供异步解耦、削峰填谷的能力,同时具备海量消息堆积、高吞吐、可靠重试等互联网应用所需的特性,是阿里巴巴双11使用的核心产品。
消息队列 RocketMQ 是阿里云正式商用的产品,目前在阿里云多个地域(Region)提供了高可用消息云服务,单个域内采用多机房部署,可用性极高,即使整个机房都不可用,仍然可以为应用提供消息发布服务,产品稳定性及可用性完全按照阿里巴巴内部标准来实施,无单点。
消息队列 RocketMQ 目前提供 TCP 和 HTTP 协议层面的接入方式,支持 Java、C++、 .NET、Go、Python、Nodejs、PHP 这七种编程语言,方便不同编程语言开发的应用快速接入消息队列 RocketMQ 消息云服务。 用户可以将应用部署在阿里云 ECS、企业自建云,或者嵌入到移动端、物联网设备中与消息队列 RocketMQ 建立连接进行消息收发,同时本地开发者也可以通过公网接入消息队列 RocketMQ 服务进行消息收发。
产品功能
消息队列 RocketMQ 提供了基于 TCP 和 HTTP 协议的多种编程语言的接入方式以及多维度的管理工具,同时针对不同的应用场景提供了一系列的特色功能。
功能概览图
多协议支持
-
支持
HTTP 协议
:采用 RESTful 标准,方便易用,快速接入,跨网络能力强,并支持七种语言客户端。 -
支持
TCP 协议
:区别于 HTTP 简单的接入方式,提供更为专业、可靠、稳定的 TCP 协议的 SDK 接入。 -
支持
STOMP 协议
:类似于 HTTP 的纯文本的协议机制,常用于脚本语言(如 Ruby、Python、Perl)和消息队列 RocketMQ Broker 进行轻量级交互。
管理工具
- Web 控制台:支持 Topic 管理、生产者管理、消费者管理、消息查询、消息轨迹展示和查询、资源报表以及监控报警管理。
- OpenAPI:提供 API 便于将消息队列 RocketMQ 管理工具集成到自己的控制台。
- mqadmin 命令集:专有云输出提供一套丰富的管理命令集,以命令方式对消息队列 RocketMQ 服务进行管理。
特色功能
- 事务消息:实现类似 X/Open XA 的分布事务功能,以达到事务最终一致性状态。
- 定时(延时)消息:允许消息生产者指定消息进行定时(延时)投递,最长支持 40 天。
- 大消息:支持最大 4 MB 消息。
- 消息轨迹:通过消息轨迹,能清晰定位消息从发布者发出,经由消息队列 RocketMQ 服务端,投递给消息订阅者的完整链路,方便定位排查问题。
- 广播消费:允许同一个 Group ID 所标识的所有 Consumer 都各自消费某条消息一次。
- 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
- 重置消费进度:根据时间重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
- 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。
- 全球消息路由:用于全球不同地域之间的消息同步复制,保证地域之间的数据一致性。消息收发模型
消息队列 RocketMQ 支持“发布/订阅”模型,消息发布者(生产者)可以将一条消息发送服务端的某个主题(Topic),多个消息接收方(消费者)订阅这个主题以接收该消息,如下图所示:
RocketMQ nameserver、broker、生产者和消费者之间的关系
请参考博客:
https://blog.csdn.net/LinYaoGai/article/details/77876078
最好先了解下各个核心模块之间的关系和功能!!!
Linux安装RocketMQ服务
-
(本次RocketMQ的版本4.4.0、JDK1.8、centos7)下载安装zip包
http://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip
-
unzip命令解压后的目录如下:
-
修改默认的配置文件:RocketMQ的bin目录下的
runserver.sh
和
runbroker.sh
的JVM内存配置最小4G,如果服务器不满足条件需要进行调整。另外要删除
MetaspaceSize
配置,因为这是JDK1.8的配置。修改后如图:
-
启动mqnamesrv服务
nohup sh mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log 根据启动日志查看启动情况
-
mqbroker服务如果rocketmq-client的生产者和消费者需要访问云服务器的broker需要更改conf目录下的broker.conf,另外需要开放默认端口号10911,如下图增加brokerIP1外网IP设置:
-
启动mqbroker服务,如果没有创建Topic启动会报错,设置允许自动创建Topic即可
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
tail -f ~/logs/rocketmqlogs/broker.log 根据日志查看启动情况
- 注意事项
- 最好新建一个用户去安装部署,注意一些文件目录访问权限,sh执行权限
- 针对rocketmq-client客户端的生产者和消费者访问云服务broker的时候,一定要配置外网访问IP
- rocketmq-client客户端连接mq服务,可能有多个109端口开头的端口不能访问,需服务器开放
- mqnamesrv默认端口,新建一个properties文件配置listenPort属性,启动时加上 -c 指定配置文件即可,同理broker一样
- 日志输出文件的目录是可配置的,详情见RocketMQ的conf目录logback.xml
部署RocketMQ-console控制台
简介
RocketMQ-Console是RocketMQ项目的扩展插件,是一个图形化管理控制台,提供Broker集群状态查看,Topic管理,Producer、Consumer状态展示,消息查询等常用功能,这个功能在安装好RocketMQ后需要额外单独安装、运行。
RocketMQ-Console下载
进入
rocketmq-externals
项目GitHub地址,如下图,可看到RocketMQ项目的诸多扩展项目,其中就包含我们需要下载的rocketmq-console。
使用git命令下载项目源码,由于我们仅需要rocketmq-console,故下载此项目对应分支即可。
git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
RocketMQ-Console配置
进入rocketmq-externals/rocketmq-console/项目文件夹并修改配置文件。
- namesrvAddr是mqnamesrv的服务地址
- server.contextPath为web服务访问的根path
- server.port为web服务端口(如果是云服务器记得开放)
vim src/main/resources/application.properties
更改好配置文件后回到rocketmq-console的根目录进行打包,这里是maven(如果未安装,自行搜索引擎 -_-)
$ mvn clean package -Dmaven.test.skip=true
$ java -jar target/rocketmq-console-ng-1.0.0.jar
#如果不想配置namesrvAddr的服务地址,多个以分号结尾
$ java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr='ip:9876;ip:9877'
启动如果报连接错误,ip请使用服务器的内网ip地址,可能localhost指向的ip是docker、或者其他虚拟ip
启动成功后访问http:ip+port/server.contextPath访问即可,如下图:
结语
如果后面有实战,将续写实战篇,敬请期待!!!!感谢您花时间浏览这篇博客,有相关疑问或者需求请留言~~