RabbitMQ入门到实战——基础篇

2024-01-11 22:04
文章标签 基础 实战 入门 rabbitmq

本文主要是介绍RabbitMQ入门到实战——基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初识RabbitMQ:高性能异步通讯组件

同步调用

异步调用

 

场景:1.对结果不关心时异步。订单状态-异步,查询-同步
2.影响性能。调用链超长,可改成异步 

MQ技术对比

kafka日志收集

RabbitMQ整体架构

 快速入门

 

 

  • 交换机只负责路由消息,没有消息保存能⼒
  • 发信息前,queue需要binding绑定交换机

数据隔离

给每个项目创建自己的用户user和虚拟主机virtual host。不同virtual host数据隔离

 

Java客户端 

RabbitMQ Tutorials — RabbitMQ 

AMQP 和 Spring AMQP

RabbitMQ 中的 AMQP 协议:AMQP 的全称是 Advanced Message Queue Protocol,即高级消息队列协议。RabbitMQ 就是根据这个协议开发的。AMQP 是一个标准的协议,不仅 RabbitMQ,如果你想自己实现一个消息队列,也可以按照这个协议来设计。 AMQP 协议主要由几个部分组成,如下图所示。

 

Publisher:消息的生产者,它负责发送消息。
Consumer:消息的消费者,它负责接收消息。
中间的部分,用兔子头标识的就是 RabbitMQ,功能如下:
生产者:发消息到某个交换机。
消费者:从某个队列中取消息。
交换机(Exchange):像路由器一样,负责将消息从生产者发送到对应的队列。
队列(Queue):存储消息的地方。
路由(Routes):转发,就是怎么把消息从一个地方转到另一个地方(比如从生产者转发到某个队列)。 

快速入门 

 1.引入依赖

2.配置RabbitMQ信息(application.yml)

 

 

3.使⽤RabbitTemplate 发送信息(Publisher)

 

4.使⽤注解 @RabbitListener 监听

work模型 

需求:模拟WorkQueue,实现⼀个队列绑定多个消费者

 默认一个消费者一个消费者轮流处理消息,但消费者处理能力不同,消费者1处理块。结果:消费者1率先处理完25条信息,消费者2缓慢处理25条信息。 问题:资源分配不合理。需要考虑队列的处理业务能⼒,能者多劳。

⾯试题:如何处理消息队列中堆积问题
1.绑定多个消费者,加快消息处理速度,解决消息堆积
2.优化业务代码:缓存、池化、异步(MQ、Java代码的异步-事件监听、线程池)

交换机 

直发给队列,只能有一个服务接收到消息,其他服务无法获取到,所以需要交换机路由转发。

Fanout交换机 

效果:Fanout⼴播交换机,两个队列都收到了信息

交换机作⽤:接收信息,路由信息

Direct交换机

 需求:不同服务需要收到不同的消息

 效果:根据Key接收消息

 Topic交换机

Direct能做的 Topic也能做,Topic在Key上更灵活方便

 

 

声明队列和交换机

问题:控制台创建队列和交换机很麻烦且易错(开发、生成、测试都要重新创建一遍) ,需要使用Java代码声明队列和交换机

注意:⼀般将配置类创建在消费者中,因为消费者更加关⼼交换机和队列及其关系,而生产者只要给对应交换机发信息即可。 

方式一(基于Bean,麻烦)

代码实现:在Config类中 new 或者 ⽤⼯⼚直接创建交换机与队列,并进⾏绑定

 

缺点:当创建Direct交换机需要绑定多个Key时,要写多个Bean类,代码冗余 

方式二(基于注解,简单)

 基于@RabbitListener注解对监听器进⾏绑定
@RabbitListener(bindings = @QueueBinding(xxx))

总结

 

消息转换器

发信息为⼀个Map 对象,⽽不是String 

 

追源码

 解决:使⽤JSON序列化代替默认的JDK序列化(Spring MVC包含Jackson依赖,只需设定Bean即可)

 

 

 

业务改造

 1.生产者和消费者都引入amqp依赖

 2.生产者和消费者都配置amqp,application.yml

3.定义JSON转化器(common中定义Jackson Bean类:Jackson2JsonMessageConverter())

4.消费者编写监听器

队列名、Key、交换机(Topic)已在需求中定义好
message 观察原先调用支付服务中的已支付接口

5.生产者发消息

写⽣产者接⼝(修改具体业务接⼝的代码逻辑),在业务内使⽤ RabbitTemplate发信息,message为Long类型的订单ID。业务内发信息的⽚段建议try-catch,以免影响业务⽽回滚

 参考:MQ基础-01.RabbitMQ课程介绍_哔哩哔哩_bilibili

这篇关于RabbitMQ入门到实战——基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595833

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边