首页 > 其他分享 >RabbitMQ---死信交换机

RabbitMQ---死信交换机

时间:2023-05-26 15:13:57浏览次数:39  
标签:dl 队列 RabbitMQ --- 死信 交换机 ttl public

什么是死信交换机?
要先解释一下什么是死信:当一个队列中的消息满足下列情况之一。就可称为死信。

  • 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false
  • 消息是一个过期消息,超时无人消费
  • 要投递的队列消息满了,无法投递
    如果这个包含死信的队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机。

死信交换机的用处
死信交换机主要用于延时发送信息,在网上买东西时,订单支付时间就可以使用到延时交换机。

TTL
一个队列中的消息如果超时未消费,则会变为死信,超时分为两种情况:

  • 消息所在的队列设置了超时时间
  • 消息本身设置了超时时间

接收死信的步骤:

  • 在consumer服务中,定义一个新的消费者,并且声明 死信交换机、死信队列
点击查看代码
@Slf4j
@Component
public class TTLListener {
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "dl.queue",durable = "true"),
            exchange = @Exchange(name = "wzh.dl",type = ExchangeTypes.DIRECT),
            key = "dl"
    ))
    public void ttlListerer(String msg){
        log.info("接收到 dl.ttl.queue的延迟消息:{}", msg);
    }
}
  • 声明一个队列,并且指定TTL
点击查看代码
@Configuration
public class TTLConfig {
    @Bean
    public Queue ttlQueue(){
        return QueueBuilder.durable("ttl.queue")  //指定队列名称,并持久化
                .ttl(10000)  //设置队列的超时时间,10秒
                .deadLetterExchange("wzh.dl")  //指定死信交换机
                .deadLetterRoutingKey("dl")  //指定死信交换机路由的key
                .build();
    }
    @Bean
    public DirectExchange ttlExchange(){
        return new DirectExchange("wzh.ttl");
    }
    @Bean
    public Binding ttlBinding(){
        return BindingBuilder.bind(ttlQueue()).to(ttlExchange()).with("ttl");
    }
}
  • 发送消息,但是不要指定TTL
点击查看代码
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class TTlQueue {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void ttlTest(){
        String msg="Hello,I'm dlExchange";
        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
        rabbitTemplate.convertAndSend("wzh.ttl","ttl",msg,correlationData);
        log.info("消息发送成功");
    }
}
  • 查看最终效果

    发送消息的十秒后消费者才会接收到消息。

标签:dl,队列,RabbitMQ,---,死信,交换机,ttl,public
From: https://www.cnblogs.com/wzh-Official/p/17434785.html

相关文章

  • 【游记】2022 CSP-S 游寄
    2023.5.25终于决定放出这段黑历史了既然是游寄,那肯定是寄了。Day0上午打了一场比赛,心态直接到崩了,又拿了一次倒数第一(呜呜,有6个人ak,我才233分)。一点半坐上小巴开往杭州,路上很无聊,想睡但路有点颠簸,头撞的有点痛,于是拿了一本《精神明亮的人》在车上看,反正是看几页眯几眼,最后......
  • Jmeter函数助手24-longSum
    longSum函数可用于计算两个或多个长值的和。intSum函数参数值的范围在-2147483648到2147483647之间,而longSum函数的参数值范围比intSum的大。Firstlongtoadd:必填,填入整数,不能为小数Secondlongtoadd:必填,填入整数,不能为小数存储结果的变量名(可选) 1、longSum函数传入......
  • 关于余弦相似性的取值范围为-1到1的归一化
    对于余弦相似性(CosineSimilarity),其范围确实是介于-1到1之间。这是因为余弦相似性衡量的是两个向量之间的夹角,其值的符号表示向量之间的方向关系,而数值的大小表示它们的相似程度。当两个向量的夹角为0度时,即完全重合,余弦相似性为1。当两个向量的夹角为90度时,即正交或无关,余弦相似......
  • 超低功耗段码LCD液晶显示屏驱动IC-VKL144A/B QFN48 超小体积封装,可完全替代PCF8551适
    VKL144A/B概述:VKL144A/B是一个点阵式存储映射的LCD驱动器,可支持最大144点(36SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示和关振荡器进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。QT921功能特点......
  • windows安装RabbitMQ及出现问题处理方法
    一、安装准备工具1.下载Eralng,下面链接已提供otp_win64_20.2.exe链接:https://pan.baidu.com/s/1lmvCMPVAV1Ba9UogCdQpZg提取码:x9m7注意:有32位版本 otp_win32_21.3.exe 根据win系统而定2.下载rabbitmq,下面链接已提供rabbitmq-server-3.7.4.exe链接:https://pan.baidu.com/s/1......
  • Go 语言 - 自定义 log
    Go语言-自定义logCode/go/go_log_demovia......
  • you-get 批量下载bilibili视频(播放列表)
    you-get批量下载bilibili视频(播放列表)看书的时候,如果真想听一些什么,还是觉得古典音乐更好。听到一个很棒的古典音乐播放列表,想下载下来,于是上网找到了you-get。安装you-get,参考https://github.com/soimort/you-get/releases$pip3install--upgradeyou-get下载视频you-ge......
  • JMeter04-性能测试流程之准备步骤
    性能测试流程性能需求分析测试人员需要与需求人员(客户)、领导及项目相关人员进行沟通,同时收集各种项目资料,对系统进行分析,确认测试的意图;确认客户对性能的态度;重点关注的性能指标。某系统需求中性能部分的说明如下要掌握哪些性能测试需求系统响应时间要求每秒完成的业......
  • Jmeter函数助手23-intSum
    intSum函数可用于计算两个或多个整数值的和。要添加的第一个整数:必填,填入整数,不能为小数要添加的第二个整数:必填,填入整数,不能为小数存储结果的变量名(可选) 1、 intSum函数求多个数的和${__intSum(-3,20,30,40,10,)}2、也可以和传入变量相加${__intSum(-3,40,10,${id},)......
  • 学习笔记-第08天-命令合集7
    属性:人的属性:性别,身高,体重,年龄。文件的属性:大小,用户,组,权限,创建时间。[root@localhost~]#stat/etc/hostsFile:‘/etc/hosts’Size:158 Blocks:8IOBlock:4096regularfileDevice:802h/2050d Inode:67109833Links:1Access:(0644/-rw-r--r......