RabbitMQ-基础

RabbitMQ

同步调用

双方交互都是实时的,可以立即返回结果

问题

  1. 拓展性差:每次有新的需求,代码经常变动,不符合开闭原则
  2. 性能下降:调用者需要等待服务提供者分别执行后才返回结果,服务提供者很多情况下会影响最终业务响应时间
  3. 级联失败:其中某一个服务提供者出现错误,回滚整个业务(用户已经扣完款之后因为短信发送失败,从而整体回滚。这样是不对的)

异步调用

双方交互不是实时的,可以同时执行多个操作

异步调用方式基于消息通知的方式,一般包含三个角色

  1. 消息发送者:投递消息的人,原调用方
  2. 消息Broker:管理,暂存,转发消息
  3. 消息接收者:接受和处理消息的人,原服务提供方

优势

  1. 耦合度高
  2. 性能更好
  3. 业务拓展性抢
  4. 故障隔离,避免级联失败

问题

  1. 完全依赖Broker的可靠性,安全性和性能
  2. 架构复杂,后期维护和调试麻烦

技术选型

安装部署

dockerfile 复制代码
docker run \
 -e RABBITMQ_DEFAULT_USER=root \
 -e RABBITMQ_DEFAULT_PASS=root \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3.8-management

默认登录地址 https://ip:15672

基本概念

  • publisher :⽣产者,也就是发送消息的⼀⽅
  • consumer :消费者,也就是消费消息的⼀⽅
  • queue :队列,存储消息。⽣产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange :交换机,负责消息路由。⽣产者发送的消息由交换机决定投递到哪个队列。
  • virtual host :虚拟主机,起到数据隔离的作⽤。每个虚拟主机相互独⽴,有各⾃的exchange、queue
  • virtual host :虚拟主机,起到数据隔离的作⽤。每个虚拟主机相互独⽴,有各⾃的exchange、queue
相关推荐
Lansonli16 小时前
大数据Spark(八十七):Spark-Submit 参数详解
大数据·分布式·spark
qq_4523962317 小时前
第二篇:《CommitLog + ConsumeQueue:一条日志解决 Kafka 多分区随机写的难题》
分布式·kafka
Alluxio1 天前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
阿卡好可爱2 天前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua
方方洛4 天前
ray教程-28-附录G-CICD与Slurm与云上调度
人工智能·分布式·机器学习
空奈qwq4 天前
【Kafka 从入门到实战】从手写一个队列到生产级消息中间件:架构、分区、消费组、零拷贝全解析
分布式·架构·kafka
山甫aa5 天前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
严肃小白兔6 天前
Cloudflare Durable Objects 支持自动重试:分布式调用如何避免重复执行?
分布式
Pniubi6 天前
基于RabbitMQ实现延迟队列
rabbitmq