后端-RabbitMQ

RabbitMQ

初识MQ

MQ(MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是异步调用中的Broker

协议

AMQP

AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个应用层的开放式标准协议 ,用于在分布式系统中实现消息的可靠传递。它定义了消息的结构、交换方式、路由规则等规范,使不通过厂商的消息中间件能够互联互通

在AMQP协议中,消息收发涉及到如下一些概念:

  • Borker:接收和分发消息的应用
  • Virtual host :出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 中创建 exchange/queue 等
  • Connection:publisher/consumer 和 broker 之间的 TCP 连接,断开连接的操作只会在 client 端进行,Broker 不会断开连接,除非出现网络故障或 broker 服务出现问题
  • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 Thread 创建单独的 Channel 进行通讯,AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销
  • Exchange:Message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (点对点), topic(发布订阅) 以及 fanout (广播)
  • Queue:消息最终被送到这里等待 Consumer 取走,一个 Message 可以被同时拷贝到多个 queue 中
  • Binding:Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 Exchange 中的查询表中,作为 Message 的分发依据
XMPP

XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是一个基于 XML 的协议,多用于即时消息(IM)以及在线现场探测,适用于服务器之间的准即时操作。核心是基于 XML 流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 它的优点是通用公开、兼容性强、可扩展、安全性高,缺点是 XML 编码格式占用带宽大)

MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,目前看来算是物联网开发中比较重要的协议之一了,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和 Actuator(比如通过 Twitter 让房屋联网)的通信协议,它的优点是格式简洁、占用带宽小、支持移动端通信、支持 PUSH、适用于嵌入式系统

比较

RabbitMQ ActiveMQ RocketMQ Kafka
社区 Rabbit Apache 阿里 Apache
开发语言 Erlang Java Java Scala&Java
协议支持 AMQP,XMPP,SMTP,STOMP OpenWire,STOMP,REST,XMPP,AMQP 自定义协议 自定义协议
可用性 高 一般 高 高
单机吞吐量 一般 差 高 非常高
消息延迟 微秒级 毫秒级 毫秒级 毫秒以内
消息可靠性 高 一般 高 一般

安装

  1. 创建data文件夹
bash 复制代码
mkdir -p /opt/rabbitmq/data
  1. 拉取镜像
bash 复制代码
docker pull rabbitmq
  1. 查看镜像
bash 复制代码
docker images
  1. 启动rabbitmq
bash 复制代码
docker run -d -v /opt/rabbitmq/data:/var/lib/rabbitmq -p 5672:5672 -p 15672:15672 --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq
  1. 启动rabbitmq_management
bash 复制代码
docker exec -it rabbitmq
rabbitmq-plugins enable rabbitmq_management
  1. 访问rabbitmq管理页面
相关推荐
特立独行的猫A3 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
码事漫谈6 小时前
我花了一周时间,看AI公司怎么"管"AI,结果越看越后背发凉
后端
爱学习的程序媛8 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
GISer_Jing9 小时前
Agent核心内容
后端·ai·langchain
budingxiaomoli10 小时前
Spring统一功能处理
java·后端·spring
某鹏10 小时前
网关选型:Go、Java、Graal 谁都不能完胜
后端
用户02478365309711 小时前
从屎山到防线:14 行状态迁移表,给任务系统装上防瞎跳闸门
后端
CQU_JIAKE11 小时前
11.13[体系结构】指标,五级流水线,八级流水线,虚实地址思考
后端
panbook13 小时前
从0到1实现一个分布式时序数据库(三):主从复制、故障检测与切换
后端
上线再说13 小时前
图片从 8.2MB 压到 296KB:我把小程序图片链路的账单拆了一遍
后端