
RabbitMQ实战指南
文章平均质量分 87
从认识MQ,了解市面主流MQ的各种特性和选型,以及安装RabbitMQ,RabbitMQ的主要功能及在项目中的运用场景,带你快速掌握RabbitMQ的实战运用技巧。
王哲晓
没有高深的知识,没有进阶的技巧,万丈高楼平地起!
展开
-
第十六章 RabbitMQ延迟消息之延迟插件优化
*** 自定义的多延时消息封装类*/@Data/*** 消息体*//*** 记录延迟时间的集合*//*** 获取并移除下一个延迟时间* @return 队列中的第一个延迟时间*//*** 是否还有下一个延迟时间* @return*/return!原创 2024-10-12 15:12:02 · 1087 阅读 · 0 评论 -
第十五章 RabbitMQ延迟消息之延迟插件
虽然延迟插件让我们在消息延迟发送的代码实现上已经非常简洁,但是在使用延迟消息中还有一个问题就是延迟消息比较损耗性能,我们在RabbitMQ上使用延迟消息时,它的内部就会维护一个时钟,每当我们定义一个新的延迟消息它就会创建一个新的时钟。如果一个任务的延迟时间特别长,比如一小时甚至一天,将非常耗性能。所以延迟消息比较适用于延迟的时间比较短的场景,比如10分钟未支付取消订单。但是我们如果直接设定10分钟后发送延迟消息,也不是最优解,我们将在下一章,对延迟消息做近一步的优化!原创 2024-10-12 13:12:58 · 2351 阅读 · 0 评论 -
第十四章 RabbitMQ延迟消息之延迟队列
虽然我们通过RabbitMQ的死信队列能够实现延迟消息的功能,但是通过代码我们可以看到,这种实现方式相对来说比较繁琐。而且关键是RabbitMQ提供死信队列的初衷并不是让我们用来发送延迟消息的,而是为了作为兜底方案,来接收没有消费的死信的,便于定位问题。因此,后续章节会给大家讲解更优的解决方案,即延迟插件。原创 2024-10-12 12:02:16 · 995 阅读 · 0 评论 -
第十三章 RabbitMQ之消息幂等性
实际项目开发中,我们在提交表单时,很多时候可能会重复提交表单,这个时候我们通过token令牌等唯一标识来解决,第一次提交页面将缓存中的唯一标识删除,后面再重新提交时缓存中的标识已经被删了因此重复提交失败。结合业务逻辑,基于业务本身做判断。以余额支付业务为例,我们要在支付后修改订单状态为已支付,应该在修改订单状态前先查询订单状态,判断状态是否是未支付。我们在消息消费的过程中也会存在同样的问题,即如何来保障所有业务在接收RabbitMQ消息时保证业务的幂等性,避免消息重复消费呢?原创 2024-10-11 23:02:06 · 1125 阅读 · 0 评论 -
第十二章 RabbitMQ之失败消息处理策略
Spring AMQP提供了消费者失败重试机制,在消费者出现异常时利用本地重试,而不是无限地requeue到mq。我们可以定义一个异常队列和交换机,来接收其他交换机队列转发的无法处理的异常消息。然后我们可以查看其中的异常消息并进行人工处理。重试耗尽后,直接reject,丢弃消息(默认方式)重试耗尽后,将失败消息投递到指定的交换机(推荐)2. 定义接收失败消息的交换机、队列及其绑定关系。重试耗尽后,返回nack,消息重新入队。在实际项目的生产环境中,通过。原创 2024-10-11 22:00:07 · 1773 阅读 · 0 评论 -
第十一章 RabbitMQ之消费者确认机制
消费者确认机制(Consumer Acknowledgement)是为了确认消费者是否成功处理消息。当消费者处理消息结束后,应该向RabbitMQ发送一个回执,告知RabbitMQ自己消息处理状态:ack:成功处理消息,RabbitMQ从队列中删除该消息nack:消息处理失败,RabbitMQ需要再次投递消息reject:消息处理失败并拒绝该消息,RabbitMQ从队列中删除该消息SpringAMQP已经实现了消息确认功能。原创 2024-10-11 18:14:52 · 2000 阅读 · 0 评论 -
第十章 RabbitMQ消息可靠性之MQ数据持久化
目录一、引言二、RabbitMQ传统持久化消息三、惰性队列3.1. 惰性队列与传统持久化的主要区别:四、总结我们在使用MQ的过程中,除了生产者发送消息/连接MQ时存在的可靠性之外,MQ自身在收发消息时也存在着消息可靠性问题。如果对MQ的使用场景和机制不了解,就可能造成消息丢失等严重的问题。在RabbitMQ中,消息的存储和处理方式可以根据不同的需求进行配置。主要有三种消息存储机制:非持久化消息、持久化消息和惰性队列。在非持久化的情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟,提升吞原创 2024-10-11 16:10:35 · 1747 阅读 · 0 评论 -
第九章 RabbitMQ消息可靠性之生产者
目录一、引言二、如何解决生产者可靠性2.1. 生产者重连2.1.1. 生产者重连配置2.1.2. 开启生产者重连效果2.2. 生产者确认2.2.1. 生产者确认配置2.2.2. 生产者确认代码实现2.2.3. 运行效果 2.2.4. 其他代码实现方式三、总结我们在实际项目过程中使用RabbitMQ消息队列时,需要充分意识到存在的消息可靠性问题。如下图所示,在电商项目中用户支付后发起消息请求修改订单,就会存在多种消息可靠性不受保障的情况:用户支付成功,即调用支付服务接口付款成功后,给RabbitMQ发送消原创 2024-10-11 10:20:56 · 1417 阅读 · 1 评论 -
第八章 RabbitMQ之消息转换器
在RabbitMQ中,消息转换器(Message Converter)用于在发送消息时将Java对象转换为RabbitMQ可以理解的字节流,以及在消费者接收消息时将字节流转换回Java对象。在实际的RabbitMQ应用中,你会配置转换器作为Spring AMQP的一部分,并在发送和接收消息时由Spring框架自动应用转换。如果需要特定的序列化行为,你可以实现自定义的转换器。原创 2024-10-10 17:03:26 · 1683 阅读 · 1 评论 -
第七章 RabbitMQ之交换机
在RabbitMQ中,交换机(Exchange)是用来接收生产者发送的消息并将这些消息路由到一个或多个队列的组件。不同类型的交换机决定了它们如何路由这些消息。以下是RabbitMQ中几种常用交换机类型:直接交换机(direct):如果路由键完全匹配,消息就被投递到相应的队列。广播交换机(fanout):消息被广播到所有绑定的队列。主题交换机(topic):如果路由键匹配模式(通配符*代表匹配多个单词和#代表匹配一个单词),消息被投递到相应的队列。头交换机(headers):通过匹配消息头进行路由。原创 2024-10-10 14:30:13 · 1840 阅读 · 0 评论 -
第六章 RabbitMQ之Work模式
在上一章的讲解中,我们通过一个simple模式的简单示例代码给大家做了快速入门演示,本章节我们就来讲讲RabbitMQ的Work模式。讲解之前,先简单介绍下RabbitMQ支持六种主要的工作模式,分别是简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式和远程调用模式(RPC)。其中,远程调用模式不常用,因此主要介绍前五种模式。Work模型的使用:多个消费者绑定到一个队列,可以加快消息处理速度同一条消息只会被一个消费者处理。原创 2024-10-10 12:02:41 · 1602 阅读 · 0 评论 -
第五章 RabbitMQ之快速入门Spring AMQP开发
RabbitMQ官网。原创 2024-10-10 10:19:03 · 835 阅读 · 0 评论 -
第四章 RabbitMQ快速入门
本章节我们通过RabbitMQ的客户端界面,通过简单的创建队列并绑定到指定交换机,来发送接收消息,以此来做个简单的入门。原创 2024-10-09 23:50:20 · 566 阅读 · 0 评论 -
第二章 初识RabbitMQ
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。能够处理大量的并发消息,适用于高吞吐量的应用场景。它支持多种消息协议和安全机制,提供丰富的监控和管理工具,方便运维人员实时监控系统状态和性能指标。RabbitMQ广泛应用于分布式系统、集成系统、子系统之间的对接,以及高并发场景下的流量削峰填谷和数据解耦等任务。RabbitMQ支持下列多种编程语言。原创 2024-10-09 23:15:10 · 1526 阅读 · 0 评论 -
第三章 RabbitMQ安装
在Mac上安装RabbitMQ,你可以使用Homebrew,这是一个在Mac上常用的包管理器。默认情况下,它在本地服务器的15672端口上运行,用户名和密码都是。你可以使用以下命令来访问它,或者直接浏览器访问。使用Web管理界面,其中默认用户和密码都是。如果您在安装过程中添加了新的用户(如上面的。(可选)启动RabbitMQ管理界面。),您可以使用该用户登录。原创 2024-10-09 22:35:17 · 1753 阅读 · 0 评论 -
第一章 初识MQ
MQ全称Message Queue,即消息队列,是一种应用间的通信方式,可用于分布式系统、异步处理等场景。在近一步去了解MQ之前,我们要清楚异步和同步的概念。:同步是指一个进程在执行某个请求时,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。这种方式按照预定的顺序执行,且可能会长时间等待某个操作的完成,有一个流程节点执行失败则全部失败。原创 2024-10-08 13:33:26 · 966 阅读 · 0 评论