当前位置: 首页 > news >正文

RabbitMQ入门基础

一、快速入门

RabbitMQ被广泛应用于分布式系统中,以实现不同组件或服务之间的异步通信。

MQ消息队列,先进先出,也就是异步调用中的Broker。

1.1同步调用的优势是什么?

  • 时效性强,等待到结果后才返回。

同步调用的问题是什么?

  • 拓展性差
  • 性能下降
  • 级联失败问题

1.2异步调用优势?

  • 接触耦合,扩展性强
  • 无需等待,性能好
  • 故障隔离
  • 缓存消息,流量削峰填谷

异步调用的问题是什么?

  • 不能立即得到调用结果,时效性差
  • 不确定下游业务执行是否成功
  • 业务安全依赖于Broker(代理)的可靠性

1.3RabbitMQ的整体框架及核心概念

  • publisher:消息发送者
  • consumer:消息的消费者
  • queue:队列,存储消息
  • exchange:交换机,负责路由消息
  • virtual-hose:虚拟主机,起到数据隔离的作用

在这里插入图片描述

1.4java客户端-快速入门

SpringAMQP如何收发消息?

① 引入spring-boot-starter-amqp依赖

② 配置rabbitmq服务端信息

③ 利用RabbitTemplate发送消息

④ 利用@RabbitListener注解声明要监听的队列,监听消息

二、WorkQueue

Work queue,任务模型,简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。

work模型的使用

  • 多个消费者绑定到一个队列,可以加快消息处理速度
  • 同一条消息只会被一个消费者处理
  • 通过设置prefetch来控制消费者预取的消息数量,处理完一条再处理下一条,实现能者多劳

三、Fanout交换机

真正生产环境都会经过exchange来发送消息,而不是直接发送到队列,交换机的类型有以下三种:

  • Fanout:广播
  • Direct:定向
  • Topic:话题

在这里插入图片描述

3.1Fanout Exchange 会将接收到的消息广播到每一个跟其绑定的uqeue,所以也叫广播模式。

交换机的作用是什么?

  • 接收publisher发送的消息
  • 将消息按照规则路由到与之绑定的队列
  • FanoutExchange的会将消息路由到每个绑定的队列

四、Direct交换机

Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由。

  • 每一个Queue都与Exchange设置一个BindingKey
  • 发布者发送消息时,指定消息的RoutingKey
  • Exchange将消息路由到BindingKey与消息RoutingKey一致的队列

在这里插入图片描述

五、Topic交换机

TopicExchange与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以.分割。

Queue与Exchange指定BindingKey时可以使用通配符:

  • #: 代指0个或多个单词
  • *: 代指一个单词

在这里插入图片描述

描述下Direct交换机与Topic交换机的差异?

  • Topic交换机接收的消息RoutingKey可以是多个单词,以.分割
  • Topic交换机与队列绑定时的bindingKey可以指定通配符
  • #: 代表0个或多个词
  • *: 代表1个词

六、声明队列交换机

SpringAMQP提供了几个类,用来声明队列、交换机及其绑定关系:

  • Queue:用于声明队列,可以用工厂类QueueBuilder构建
  • Exchange:用于声明交换机,可以用工厂类ExchangeBuilder构建
  • Binding:用于声明队列和交换机的绑定关系,可以用工厂类BindingBuilder构建

声明队列、交换机、绑定关系的Bean是什么?

  • Queue
  • FanoutExchange、DirectExchange、TopicExchange
  • Binding

基于@RabbitListener注解声明队列和交换机有哪些常见注解?

  • @Queue
  • @Exchange

七、消息转换器

建议采用JSON序列化代替默认的JDK序列化,要做两件事情:

在publisher和consumer中都要引入jackson依赖:

  <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

在publisher和consumer中都要配置MessageConverter:

@Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}

通过以上总结,可快速掌握 RabbitMQ 的核心概念、使用场景及 SpringAMQP 的集成方法,为构建高可靠、高性能的异步通信系统提供基础支持。

相关文章:

  • 表驱动 FSM 在 STM32 上的高效实现与内存压缩优化——源码、性能与实践
  • 如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
  • 【C++11】其他一些新特性 | 右值引用 | 完美转发
  • 数据库MySQL学习——day8(复习与巩固基础知识)
  • cuDNN 9.9.0 便捷安装-Windows
  • Python读取comsol仿真导出数据并绘图
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.4 数据重复与去重(IDENTITY COLUMN/UNIQUE约束)
  • 软考-软件设计师中级备考 8、进程管理
  • 硬件加速模式Chrome(Edge)闪屏
  • React class 的组件库与函数组件适配集成
  • CSS 变量与原生动态主题实现
  • ES6/ES11知识点 续二
  • 高等数学第三章---微分中值定理与导数的应用(§3.6 函数图像的描绘§3.7 曲率)
  • FGMRES(Flexible Generalized Minimal Residual)方法
  • 关于MindVault项目测试报告
  • 【IP101】边缘检测技术全解析:从Sobel到Canny的进阶之路
  • 文章记单词 | 第60篇(六级)
  • 代码随想录day8: 字符串part01
  • WebRTC 服务器之Janus视频会议插件信令交互
  • STM32Cube-FreeRTOS任务调度与任务管理-笔记
  • 9金收官!跳水世界杯总决赛朱子锋、程子龙包揽男子10米台冠亚军
  • 体坛联播|赵心童晋级世锦赛决赛,德布劳内一球制胜
  • 高速变道致连环车祸,白车“骑”隔离栏压住另一车,交警回应
  • 11家券商一季度净利翻番:9家利润超20亿,国泰海通居首
  • 网警查处编造传播“登顶泰山最高可得3万奖金”网络谣言者
  • 北方旱情持续,水利部:大中型灌区春灌总体有保障