Message Queue:是提供消息队列服务的中间件,提供消息生产,存储,消费的全过程。
作用:限流削峰,异步解耦。
ActiveMQ:早期产品,使用Java开发的
RabbitMQ:吞吐量比kafuka和RocketMQ低,不是Java开发(ErLang),定制开发难度大
Kafuka:高吞吐量,常用于大数据领域实时计算和日志收集,采用Scala/Java开发,采用自研协议
RocketMQ:阿里巴巴产品,经过多年双十一检验,使用Java开发
JMS,Java Messaging Service (Java消息服务)。是Java平台上有关MOM(的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口,简化企业应用的开发。ActiveMO是该协议的典型实现。
STOMP, Streaming Text Orientated Message Protocol,是一种MOM设计的简单文本协议。STOMP提供一个可互操作的连接格式,允许客户端与任意STOMP消息代理进行交互。ActiveMQ是该协议的典型实现,RabbitMO通过插件可以支持该协议。
AMOP,Advanced Message Oueuing Protocol(高级消息队列协议),一个提供统一消息服务的应用层标准,是应用层协议的一个开放标准,是一种MOM设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。 RabbitMQ是该协议的典型实现。
消息(Message):消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。
主题(Topic) :Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位,一个生产者可以同时发送多种Topic的消息;而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息。
队列(Queue) :存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的就是该Topic的消息Topic的Queue也被称为一个Topic中消息的分区。一个Topic的Queue中的消息只能被一个消费者组中的一个消费者消费
1)producer:消息生产者,负责生产消息。Producer通过MO的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。
RocketMQ中的消息生产者都是以生产者组(Producer Group) 的形式出现的。生产者组是同一类生产者的集合,这类Producer发送相同Topic类型的消息。
2)Consumer:消息消费者,负责消费消息。一个消息消费者会从Broker服务器中获取到消息,并对消息进行相关业务处理。
RocketMO中的消息消费者都是以消费者组 (Consumer Group) 的形式出现的。消费者组是同一类消费者的集合,这类Consumer消费的是同一个Topic类型的消息。消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。
3)NameServer:NameServer是一个Broker与Topic路由的注册中心,支持Broker的动态注册与发现。主要包括两个功能:
1)到官网下载下载 下载地址 下载二进制的
2)把这个包放到linux中,解压,修改bin中的 runserver.sh,runbroker.sh
unzip rocketmq-all-5.1.3-bin-release.zip
把下面这些内存改小(配置文件都看一遍,不同版本的配置文件可能不同),我这里是已经改好的
3)修改conf下broker.conf,加上下面两行
namesrvAddr=服务器外网IP:9876
brokerIP1=服务器外网IP
3.5)设置密码
# 用户名=密码
userA=passwordA
userB=passwordB
# 启用密码认证
enablePropertyFilter=true
# 指定密码文件的路径
propertyFile=${user.home}/conf/broker-users.properties
4)改完之后 看官网教程往下走就行 官网教程,注意启动broker的时候执行
nohup sh mqbroker -n localhost:9876 --enable-proxy & -c ../conf/broker.conf & tail -f nohup.out
5)安装控制台,我是在docker中装的 安装docker教程(直接运行的springboot项目太麻烦了)
运行如下命令即可
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=你的主机ip:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 9800:8080 pangliang/rocketmq-console-ng