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

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 的集成方法,为构建高可靠、高性能的异步通信系统提供基础支持。

http://www.xdnf.cn/news/3749.html

相关文章:

  • 250504_VsCode使用
  • 14.Excel:排序和筛选
  • 【PINN】DeepXDE学习训练营(13)——operator-antiderivative_aligned.py
  • 汇编常用语法
  • node核心学习
  • IBM DB2 两地三中心方案与配置
  • shell编程补充内容(Linux课程实验3)
  • 【SpringAI+阿里云百炼】AI对话4个Demo
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
  • 力扣每日一题1007、行相等的最少多米诺旋转
  • 爬虫管理平台-最新版本发布
  • 李沐《动手学深度学习》 | Softmax回归 - 分类问题
  • 【AI面试准备】从0-1搭建人工智能模型自动化评估理论与测试,掌握测试数据集建立与优化,熟练数据处理和模型评测工作
  • RV1126单目摄像头取流,实现双路输出(一路H.264编码推流,一路给算法)
  • 【React】 Hooks useTransition 解析与性能优化实践
  • 套接字+Socket连接
  • Y1模拟一 补题报告
  • function包装器的意义
  • Milvus(13):自定义分析器、过滤器
  • Dubbo(94)如何在金融系统中应用Dubbo?
  • validator - Go 结构体验证库
  • 每天五分钟深度学习框架PyTorch:基于Dataset封装自定义数据集
  • 深入理解Java垃圾回收机制
  • NV228NV254固态美光颗粒NV255NV263
  • 2025年01月03日美蜥(杭州普瑞兼职)一面
  • 【C++ Qt】输入类控件(上) LineEdit、QTextEdit
  • 升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测
  • 黑马点评day01(基于Redis)
  • C++学习:六个月从基础到就业——C++11/14:右值引用与移动语义
  • Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷