首页 > 其他分享 >RabbitMQ死信队列和延迟队列(具体代码演示)

RabbitMQ死信队列和延迟队列(具体代码演示)

时间:2024-09-30 20:21:48浏览次数:8  
标签:消费者 队列 args RabbitMQ Queue 死信 消息

先理解以下两点:

1.延迟队列存储是延时消息,指当消息被发送以后,不让消费者立即拿到消息,而是等待指定时间后,消费者才能拿到消息进行消费。(队列设置过期时间对队列中所有消息生效,如果队列和消息都设置了消息过期时间,会取时间短的)

2.入死信队列的三种情况:

1.请求被拒绝的消息
2.超过了设置的消息过期时间的消息
3.消息的数量超过最大队列长度的消息才会进入死信队列。

 下面我演示几个场景,附具体代码:

场景1:(生产者向消费者1和消费者2发送消息,消费者1拒绝且丢弃消息,观察是否会进入死信队列;消费者2拒绝消息且设置消息重新入队,观察结果;消费者3消费死信)

生产者部分:

public class SendConfig {

    //Queue队列的声明的5个参数分别是:
    //name:队列名称
    //durable:队列是否持久化
    //exclusive:队列是否具有排他性:只对首次声明它的连接可见,会在这个连接断开的时候自动删除。
    //autoDelete:队列是否自动删除:经历过至少一次连接后,所有的消费者都断开了连接,此时队列会进行自动删除。
    //arguments:封装队列的一些参数。
    @Bean
    public Queue queue1() {
        //封装arguments
        Map<String, Object> args = new HashMap<>();
        args.put("x-dead-letter-exchange","dieex"); //声明当前队列绑定的死信交换机
        args.put("x-dead-letter-routing-key","die.aa");  //声明当前队列的私死信路由key
        return new Queue("queue1", true, false, false, args);
    }

    @Bean
    public Queue queue2() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-dead-letter-exchange","dieex"); //声明当前队列绑定的死信交换机
        args.put("x-dead-letter-routing-key","die.dd");  //声明当前队列的死信路由key
        return new Queue("queue2", true, false, false, args);
    }

    //TopicExchange 的参数如下:
    //name:交换机的名称;

标签:消费者,队列,args,RabbitMQ,Queue,死信,消息
From: https://blog.csdn.net/m0_73204222/article/details/142661083

相关文章

  • Leetcode:栈和队列的互相实现
    目录一、用两个队列实现栈题目:分析:代码实现: 二、用两个栈实现队列题目: 分析:代码:总结:核心就在于先进先出和后进先出之间的一个灵活变换,两个栈能够先进先出,而两个队列能够后进先出 一、用两个队列实现栈题目:.-力扣(LeetCode).-备战技术面试?力扣提供海量技术......
  • 1284 海港 队列 模拟
    思路解释 1. 数据结构选择: 使用 queue 来存储每艘船的到达时间和乘客国籍信息。 使用数组 a 来记录每个国籍的乘客数量。 2. 输入处理: 读取船只数量 n。 对于每艘船,读取其到达时间 t 和乘客数量 k,然后读取每个乘客的国籍 x。 3. 统计不同......
  • 9073 关系网络 广搜 队列
    解决思路 广度优先搜索 (BFS):使用BFS从起点 x 开始搜索,找到到达终点 y 的最短路径。 队列:使用队列存储当前节点和步数。 访问标记:使用数组 vis 标记节点是否被访问过,防止重复访问。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;c......
  • 2520 牛的舞蹈表演 二分答案 优先队列
    解决思路 二分查找:使用二分查找来确定舞台的最小大小 K。 检查函数:定义一个检查函数 check(mid),判断在舞台大小为 mid 时,演出是否能在 T_max 时间内完成。 优先队列:使用优先队列模拟舞台上的奶牛,确保每次有奶牛完成表演时,下一头奶牛立即上台。 更新边界:......
  • 9564 Work Scheduling 结构体排序 优先队列 最小堆 贪心
    解决思路 排序:首先将所有工作按照截止时间 D_i 进行排序。 优先队列:使用一个最小堆来存储当前选择的工作的利润。 选择工作:遍历所有工作,如果当前工作的截止时间大于堆的大小,则将该工作加入堆中;否则,如果当前工作的利润大于堆顶的利润,则替换堆顶的工作。#include......
  • 3319 哈夫曼树 优先队列 最小堆
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e3+10,inf=0x3f3f3f3f;//优先队列(最小堆),用于存储叶结点的权值priority_queue<int,vector<int>,greater<int>>q;intn,ans,x;intmain(){//读取叶结点的数量......
  • rabbitmq部署 从单节点到集群,到镜像
    想搭建镜像,也需要从单节点一步步往下,按顺序执行,应该不会有什么问题准备工作:1、设置主机名(根据自己主机的情况设置,主机名不能有.)hostnamectlset-hostnamenode01###节点01hostnamectlset-hostnamenode02###节点02hostnamectl--prettyhostnamectl-......
  • WPF下使用FreeRedis操作RedisStream实现简单的消息队列
    RedisStream简介RedisStream是随着5.0版本发布的一种新的Redis数据类型:高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据添加时被唤醒并开始......
  • Java中的队列数据结构及其应用
    Java中的队列数据结构及其应用队列是一种线性数据结构,遵循先进先出(FIFO)的原则,即最先插入的元素最先被移除。队列的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(peek)。本文将介绍队列的基本结构、操作及在JDK中的应用。队列的基本结构一个简单的队列可以用数组或......
  • python 操作RabbitMq详解
    一、简介:RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取完成通信。而作为中间件的RabbitMq无疑是目前最流行的消息队列之一。    RabbitMq......