一 什么是死信队列 当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信. 消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL过期 队列达到最大长度 当消息在一个队列中变成一个死信之后,如果配置了死信队列,它将被重新publish到死信交换机,死信交换机将死信投递到一个队列上,这个队列就是死信队列. 二 实现死信队列 2.1 原理图 2.2 创建消费者 创建一个消费者,绑定消费队列及死信交换机,交换机默认为direct模型…
前言 前段时间写过一篇: # RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得 很多人加了我好友,说很喜欢这篇文章,也问了我一些问题. 因为最近工作比较忙,隔了一段时间没写,忙完后专门花时间把RabbitMQ剩下的一个重要技术点通过案例的方式整理出来,就是延迟消息的用法. 延迟消息含义不解释了,就是字面意思. 用法一共两种方式,死信队列和延迟插件,两种各有利弊,我会一一陈述并给出最佳用法. 死信队列方式 死信队列不要理解成很玄乎的东西,它就是普通队列绑…
本文口味:爆炒鱿鱼   预计阅读:15分钟 一.说明 RabbitMQ是流行的开源消息队列系统,使用erlang语言开发,由于其社区活跃度高,维护更新较快,性能稳定,深得很多企业的欢心(当然,也包括我现在所在公司[手动滑稽]). 为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.但由于对死信队列的概念及配置不熟悉,导致曾一度陷入百度的汪洋大海,无法自拔,很多文章都看起来可行,但是实际上却并不能帮我解决实际问题.最终,在官网文档…
RabbitMQ 的优化 channel prefetch Count 死信队列 什么是死信队列 使用场景 代码实现 延迟队列 什么是延迟队列 使用场景 实现延迟队列的方式 Queue TTL Message TTL 使用 Queue TTL 设置过期时间 使用 Message TTL 设置过期时间 使用插件还是Queue TTL处理延迟队列呢? 参考 RabbitMQ 的优化 channel 生产者,消费者和 RabbitMQ 都会建立连接.为了避免建立过多的 TCP 连接,减少资源额消耗.…
1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; namesp…
目录 消费端限流 1. 为什么要对消费端限流 2.限流的 api 讲解 3.如何对消费端进行限流 TTL 1.消息的 TTL 2.队列的 TTL 死信队列 实现死信队列步骤 总结 消费端限流 1. 为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据! 当数据量特别大的时候,我们对生产端限流肯定是不科学的,因为有时候并发量就是特别大,…
TTL概念 TTL是Time To Live的缩写,也就是生存时间. RabbitMQ支持消息的过期时间,在消息发送时可以进行指定. RabbitMQ支持队列的过期时间,从消息入队列开始计算,只要超过了队列的超时时间配置,那么消息会自动的清除. 这与 Redis 中的过期时间概念类似.我们应该合理使用 TTL 技术,可以有效的处理过期垃圾消息,从而降低服务器的负载,最大化的发挥服务器的性能. TTL是Time To Live的缩写,也就是生存时间.RabbitMQ支持消息的过期时间,在消息发送时…
1.RabbitMQ TTL及死信队列 1.1.TTL概述 过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取:过了之后消息将自动被删除.RabbitMQ可以对消息和队列设置TTL.目前有两种方法可以设置. 第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间. 第二种方法是对消息进行单独设置,每条消息TTL可以不同. 注意: 如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准.消息在队列的生存时间一旦超过设置的TTL值,就称为de…
1:何为死信队列 死信队列也是一个正常的队列,可以被消费. 但是,死信队列的消息来源于其他队列的转发. 2:如何触发死信队列 1:消息超时 2:队列长度达到极限 3:消息被拒绝消费,并不再重进队列,且reQueue = false 需要在消费者的 arguments 中配置死信队列,配置为: "x-dead-letter-exchange":"自定义的交换机名称" 3:在Java中实例死信队列 3.1:生产者代码 3.2:消费者代码 4:测试效果 4.1:打开Rab…
在说死信队列之前,我们先介绍下为什么需要用死信队列. 如果想直接了解死信对接,直接跳入下文的"死信队列"部分即可. ack机制和requeue-rejected属性 我们还是基于上篇<Spring Boot系列--7步集成RabbitMQ>的demo代码来说. 在项目springboot-demo我们看到application.yaml文件部分配置内容如下 ... listener: type: simple simple: acknowledge-mode: auto c…