RabbitMQ消息队列---常用队列以及测试

1 死信队列

1.1 什么是死信队列

       死信队列主要是指因某种原因无法被消费者消费的信息,这些信息要么在队列中造成阻塞要么被直接删除掉从而造成消息丢失。比如:按照正常的逻辑来说,生产者生产消息发送到RabbitMQ的broke中,然后消费者从队列中获取消息进行消费,这是正常的消息队列运行状况。但如果由于特定的原因导致队列中的消息无法被消费,这些消息就变成了死信消息,而死信队列则是用来存储这些死信消息的。

       死信消息的来源一般有三种,分别是:消息TTL过期,队列长度已满和消息被拒绝且没有重新入队

1.2 死信代码架构

在这里插入图片描述
       死信队列处理流程一般为:当消息生产者生产出消息时,会将消息发送到broke的交换机上,交换机会根据路由key将消息转发到相对应的队列中给消费者消费,但如果消息者在消费消息过程中出现消息设置时间过期了,或者队列的长度已经满了和消息被拒绝且无法入队时,这些出现问题的消息就会变成死信消息,死信消息会被发送到死信交换机,死信交换机会将死信发送到相对应的死信队列中,让消费者02做相关的处理操作。

1.3 Web界面演示

1.设置交换机: 设置两个交换机,一个绑定正常队列,另一个绑定死信队列,交换机的类型可以随意选择,但要注意交换机类型的特点,比如说:direct类型要设置路由key等等
在这里插入图片描述
2.设置队列: 设置一个正常队列,并绑定direct交换机和设置死信交换机和消息过期时间,再设置一个普通队列绑定死信交换机作为死信队列
在这里插入图片描述
3.测试: 在direct交换机中发送一条消息,首先会发送到ttl_queue,10秒后消息过期进入死信队列
在这里插入图片描述

1.4 整合SpringBoot测试

1.创建生产者: 创建生产者,配置好Rabbit配置类和测试消息

package com.example.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

@Configuration
public class RabbitConfig {
   
    //声明交换机
    @Bean
    public TopicExchange topicExchange(){
   
        return new TopicExchange("ttl_exchange");
    }

    //声明死信交换机
    @Bean
    public FanoutExchange deadExchange(){
   
        return new FanoutExchange("dead_exchange");
    }

    //声明队列
    @Bean
    public Queue queue(){
   
        HashMap<String, Object> args = new HashMap<>();
        args.put("x-message-ttl",10000);
        args.put("x-dead-letter-exchange","dead_exchange");
        //args.put("x-dead-letter-routing-key","");
        return new Queue("ttl_queue",true,false,false,args);
    }

    @Bean
    public Queue queue01(){
   
        return new Queue("dead_queue",true);
    }

    //交换机绑定队列
    @Bean
    public BindingBuilder.TopicExchangeRoutingKeyConfigurer binding01(){
   
        return BindingBuilder.bind(queue()).to(topicExchange());
    }

    @Bean
    public Binding binding02(){
   
        return BindingBuilder.bind(queue01()).to(deadExchange());
    }
}
@Service
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值