rabbitmq延迟队列demo

yml配置类
# 应用名称
spring:
  application:
    name: springboot-rabbitmq-demo
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
config 配置类
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class TtlDealQueueConfig {

    //正常的延迟交换机
    private static final String TTL_NORMAL_EXCHANGE = "ttl_test_exchange";
    //routingKey
    private static final String TTL_TEST_ROUTING_KEY = "ttl_test_routing_key";
    // 死信队列交换机
    private static final String DEAD_TEST_EXCHANGE = "dead_test_exchange";
    // //routingKey
    private static final String DEAD_TEST_ROUTING_KEY = "dead_test_routing_key";

    //延迟队列名称
    private static final String TTL_TEST_QUEUE = "ttl_test_queue";
    //死信队列名称
    private static final String DEAD_TEST_QUEUE = "dead_test_queue";


    @Bean("ttlTestExchange")
    public DirectExchange ttlTestExchange() {
        return new DirectExchange(TTL_NORMAL_EXCHANGE);
    }

    @Bean("deadTestExchange")
    public DirectExchange deadTestExchange() {
        return new DirectExchange(DEAD_TEST_EXCHANGE);
    }
    
    @Bean("ttlTestQueue")
    public Queue ttlTestQueue() {
        Map<String, Object> map = new HashMap<>();
        map.put("x-dead-letter-exchange", DEAD_TEST_EXCHANGE);
        map.put("x-dead-letter-routing-key", DEAD_TEST_ROUTING_KEY);
        return QueueBuilder.durable(TTL_TEST_QUEUE).withArguments(map).build();
    }
    @Bean("deadTestQueue")
    public Queue deadTestQueue() {
        return QueueBuilder.durable(DEAD_TEST_QUEUE).build();
    }

    //绑定队列交换机
    @Bean
    public Binding queueBindingTtl(@Qualifier("ttlTestQueue") Queue ttlTestQueue,
                                   @Qualifier("ttlTestExchange") DirectExchange ttlTestExchange) {

        return BindingBuilder.bind(ttlTestQueue).to(ttlTestExchange).with(TTL_TEST_ROUTING_KEY);
    }

    @Bean
    public Binding queueBindingDead(@Qualifier("deadTestQueue") Queue deadTestQueue,
                                   @Qualifier("deadTestExchange") DirectExchange deadTestExchange) {

        return BindingBuilder.bind(deadTestQueue).to(deadTestExchange).with(DEAD_TEST_ROUTING_KEY);
    }
}
生产者

import java.lang.annotation.Target;
import java.util.Date;


@Slf4j
@RestController
@RequestMapping("/ttl")
public class ProducerContrller {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/sendMsg/{message}/{ttlTime}")
    public void sendMsg(@PathVariable String message,@PathVariable String ttlTime){
        log.info("当前时间:{},发送一条消息给ttl队列:{},ttl时长:{}ms", new Date().toInstant(), message,ttlTime);
        rabbitTemplate.convertAndSend("ttl_test_exchange", "ttl_test_routing_key", message, msg -> {
            msg.getMessageProperties().setExpiration(ttlTime);
            return msg;
        });
    };
}


消费者


import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.util.Date;


@Slf4j
@Component
public class DeadConsumer {
    @RabbitListener(queues = "dead_test_queue")
    public void receiveDeadMsg(Message message, Channel channel) throws Exception {
        String msg = message.getBody().toString();
        log.info("当前时间:{},收到的死信消息",new Date().toInstant() ,msg);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值