当前位置: 首页 > article >正文

RabbitMQ-死信交换机和死信队列

1. 简介

DLX: Dead-Letter-Exchange 死信交换器,死信邮箱
在这里插入图片描述

2.代码示例

@Configuration
public class RabbitConfig {
    final static String exchangeNormalName = "exchange.dlx.normal";
    final static String queueNormalName = "queue.dlx.normal";
    final static String exchangeDeadName = "exchange.dlx.dead";
    final static String queueDeadName = "queue.dlx.dead";


    //正常交换机
    @Bean
    public DirectExchange normalExchange(){
        return ExchangeBuilder.directExchange(exchangeNormalName).build();
    }
    //正常队列
    @Bean
    public Queue normalQueue(){
        Map<String, Object> map = new HashMap<>();
        map.put("x-message-ttl", 20000);//设置20s的过期时间
        map.put("x-dead-letter-exchange", exchangeDeadName);//设置死信交换机名字
        map.put("x-dead-letter-routing-key", "error");//设置死信交换机路由k
        return QueueBuilder.durable(queueNormalName)
                .withArguments(map)
                .build();
    }

    @Bean
    public Binding normalBinding(DirectExchange normalExchange, Queue normalQueue){
        return BindingBuilder.bind(normalQueue).to(normalExchange).with("order");
    }


    //死信交换机
    @Bean
    public DirectExchange dlxExchange(){
        return ExchangeBuilder.directExchange(exchangeDeadName).build();
    }
    //死信队列
    @Bean
    public Queue dlxQueue(){
        return QueueBuilder.durable(queueDeadName).build();
    }

    @Bean
    public Binding dlxBinding(DirectExchange dlxExchange, Queue dlxQueue){
        return BindingBuilder.bind(dlxQueue).to(dlxExchange).with("error");
    }

}

如上,设置普通交换机把过期内容放置到死信交换机中去。最重要的几行代码

		map.put("x-message-ttl", 20000);//设置20s的过期时间
        map.put("x-dead-letter-exchange", exchangeDeadName);//设置死信交换机名字
        map.put("x-dead-letter-routing-key", "error");//设置死信交换机路由k

3.测试结果

在这里插入图片描述

经过20s之后,如下,将普通队列的信息放入死信队列中

在这里插入图片描述
其中TTL代表x-message-ttl,DLX代表x-dead-letter-exchange,DLK代表x-dead-letter-routing-key

4.单条消息

上方是将整个队列设置过期时间,也可以将单条消息设置过期时间,即不给整个队列设置过期时间

		//map.put("x-message-ttl", 20000);//设置20s的过期时间
        map.put("x-dead-letter-exchange", exchangeDeadName);//设置死信交换机名字
        map.put("x-dead-letter-routing-key", "error");//设置死信交换机路由k

而是在消息体中设置过期时间

@Component
@Slf4j
public class MessageService {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    public void senMsg() throws InterruptedException {

        //定义消息
        String msg="单条消息过期时间test";
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setExpiration("10000"); //10s
        Message message= MessageBuilder.withBody(msg.getBytes()).andProperties(messageProperties).build();
        //发消息
        rabbitTemplate.convertAndSend("exchange.dlx.normal","order",message);
        log.info("消息发送完毕,发送时间为:{}", new Date());
    }
}

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/news/107355.html

相关文章:

  • Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK
  • 基于单片机的智能清洁小车设计—控制系统设计
  • GienTech动态|入选软件和信息技术服务名牌企业;荣获城市数字化转型优秀案例;参加第四届深圳国际人工智能展
  • 基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)上位机设计
  • Java流(Stream)详解
  • tomcat必要的配置
  • Centos使用tomcat部署jenkins
  • cola架构:有限状态机(FSM)源码分析
  • jenkins如何安装?
  • 基于SpringBoot+Vue的服装销售系统
  • Python深度学习实战-基于Sequential方法搭建BP神经网络实现分类任务(附源码和实现效果)
  • 基于GPIO子系统编写LED驱动,编写应用程序进行测试设置定时器,5秒钟打印一次hello world
  • 软考 系统架构设计师系列知识点之设计模式(4)
  • GoLong的学习之路(十四)语法之标准库 time(时间包)的使用
  • MySQL语言分类
  • 论文阅读 - Hidden messages: mapping nations’ media campaigns
  • Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结
  • 在 macOS 上的多个 PHP 版本之间切换
  • 李沐——论文阅读——VIT(VIsionTransformer)
  • 使用Gateway解决跨域问题时配置文件不生效的情况之一
  • CTF-php特性绕过
  • 一次不接受官方建议导致的事故
  • 软考高项-计算题(3)
  • 【LeetCode】5. 最长回文子串
  • 10月28日,每日信息差
  • HarmonyOS开发:探索组件化模式开发
  • Flink CDC 2.0 主要是借鉴 DBLog 算法
  • PostgreSQL basebackup备份和恢复
  • 闲聊一下写技术博客的一些感想
  • Dijkstra算法基础详解,附有练习题