死信队列入门(两个消费者,一个生产者)

整理一下死信队列。

无法被消费的消息

死信来源

消息TTL过期
队列达到最大长度

队列满了,无法再添加消息到mq

消息被拒绝

50 死信代码架构图

在这里插入图片描述

直接交换机 zhangsan 被C1消费

死信交换机 lisi 添加到dead-queue 被C2消费

51 c1 消费者

public class Consumer01{
    //普通交换机名称
    public static final String NORMAL_EXCHANGE="normal_exchange";
    //死信交换机
    public static final String DEAD_EXCHANGE="dead_exchange";
    //普通队列名称
    public static final String NORMAL_QUEUE="normal_queue";
    //死信队列名称
    public static final String DEAD_QUEUE="dead_queue";
    public static void main() throws Exception{
        
        Channel channel=RabbitMqUtil.getChannel();

        //声明普通交换机 /死信交换机
        channel.exchangeDeclare(NORMAL_EXCHANGE,BuiltinExchangeType.DIRECT);
        channel.exchangeDeclare(DEAD_EXCHANGE,BuiltinExchangeType.DIRECT);
        //声明普通队列
        Map<String ,Object> arguments=new HashMap<>();
        //过期时间
        //arguments.put("x-message-ttl",1000000);
        //正常队列设置过期之后的死信交换机
        arguments.put("x-dead-letter-exchange",DEAD_EXCHANGE);
        //设置死信RoutingKey
        arguments.put("x-dead-letter-routing-key","lisi");
    	channel.queueDeclare(NORMAL_QUEUE,false,false,false,null);
        
        //死信队列
        channel.queueDeclare(DEAD_QUEUE,false,false,false,null);
        //绑定普通交换机和队列
        channel.queueBind(NORMAL_QUEUE,NORMAL_EXCHANGE,"zhangsan");
        
        //绑定死信交换机和死信队列
        channel.queueBind(DEAD_QUEUE,DEAD_EXCHANGE,"lisi");
        sout("等待接收消息");
        //回调函数
        DeliverCallback deliverCallback=(consumerTag,message)->{
            sout("Consumer01接收的消息时"+new String(message.getBody(),"UTF-8"));
        };
        channel.basicConsume(NORMAL_QUEUE,true,deliverCallback,consumeTag->{});    
    }
}

52 生产者

public class Producer{
    //普通交换机名称
    public static final String NORMAL_EXCHANGE="normal_exchange";
    public static void main() throws Exception{
        Channel channel=RabbitMaUtils.getChannel();
        //死信消息
AMQP.BasicProperties=new AMQP.BasicProperties().builder().expration("10000").build();
        
        //死信消息 设置ttl时间
        for(int i=1;i<11;i++){
            String message="info"+i;
    channel.basicPublish(NORMAL_EXCHANGE,"zhangsan",properties,message.getBytes());
		}
    }
}

停掉消费者,消息转发到死信队列

53 消费者2

这个简单,就是单纯的接收普通队列转发来的消息进行消费。

public class Consumer02{
   
    //死信队列名称
    public static final String DEAD_QUEUE="dead_queue";
    public static void main() throws Exception{
        Channel channel=RabbitMqUtil.getChannel();
        sout("等待接收消息");
        
        DeliverCallback deliverCallback=(consumerTag,message)->{
            sout("Consumer02接收的消息时"+new String(message.getBody(),"UTF-8"));
        };
        channel.basicConsume(NORMAL_QUEUE,true,deliverCallback,consumeTag->{});    
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Spring Boot实现Kafka生产者死信队列的步骤: 1.在pom.xml文件中添加Kafka和Spring Kafka依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.7.2</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.0</version> </dependency> ``` 2.在application.properties文件中配置Kafka: ```properties spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.properties.max.poll.interval.ms=60000 spring.kafka.consumer.properties.max.poll.records=100 spring.kafka.consumer.properties.max.partition.fetch.bytes=1048576 spring.kafka.consumer.properties.fetch.max.bytes=5242880 spring.kafka.consumer.properties.fetch.min.bytes=1 spring.kafka.consumer.properties.fetch.max.wait.ms=500 spring.kafka.consumer.properties.session.timeout.ms=30000 spring.kafka.consumer.properties.enable.auto.commit=true spring.kafka.consumer.properties.auto.commit.interval.ms=5000 spring.kafka.consumer.properties.isolation.level=read_committed spring.kafka.consumer.properties.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.producer.properties.value.serializer=org.apache.kafka.common.serialization.StringSerializer ``` 3.创建一个Kafka生产者: ```java @Service public class KafkaProducerService { @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } } ``` 4.创建一个Kafka消费者: ```java @Service public class KafkaConsumerService { @KafkaListener(topics = "my-topic") public void receiveMessage(String message) { // 处理消息 } @KafkaListener(id = "my-group", topics = "my-topic-dlq") public void receiveDlqMessage(String message) { // 处理死信队列消息 } } ``` 5.在application.properties文件中配置死信队列: ```properties spring.kafka.listener.type=single spring.kafka.listener.poll-timeout=5000 spring.kafka.listener.concurrency=1 spring.kafka.listener.ack-mode=manual_immediate spring.kafka.listener.retry-template.max-attempts=3 spring.kafka.listener.retry-template.back-off=1000 spring.kafka.listener.retry-template.multiplier=2.0 spring.kafka.listener.retry-template.max-interval=60000 spring.kafka.listener.retry-template.exponential-backoff=true spring.kafka.listener.retry-template.initial-interval=1000 spring.kafka.listener.retry-template.retry-policy=SIMPLE_RETRY spring.kafka.listener.retry-template.stateful-retry=true spring.kafka.listener.retry-template.include-headers=true spring.kafka.listener.retry-template.max-time=60000 spring.kafka.listener.retry-template.recovery-callback-class=org.springframework.kafka.listener.SeekToCurrentErrorHandler spring.kafka.listener.retry-template.recovery-callback-method=recover spring.kafka.listener.retry-template.back-off-strategy=org.springframework.kafka.backoff.ExponentialBackOff spring.kafka.listener.retry-template.back-off-strategy.max-interval=60000 spring.kafka.listener.retry-template.back-off-strategy.initial-interval=1000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.max-attempts=3 spring.kafka.listener.retry-template.back-off-strategy.exponential=true spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-interval=1000 spring.kafka.listener.retry-template.back-off-strategy.max-interval=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta=1000 spring.kafka.listener.retry-template.back-off-strategy.initial-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.multiplier=2.0 spring.kafka.listener.retry-template.back-off-strategy.randomization-factor=0.5 spring.kafka.listener.retry-template.back-off-strategy.max-interval-factor=2.0 spring.kafka.listener.retry-template.back-off-strategy.min-duration=1000 spring.kafka.listener.retry-template.back-off-strategy.max-duration=60000 spring.kafka.listener.retry-template.back-off-strategy.delta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值