延时队列优化 (2)

简介: 在这里新增了一个队列QC,绑定关系如下,该队列不设置TTL时间

在这里新增了一个队列QC,绑定关系如下,该队列不设置TTL时间


108f78c2e8f54acda1959610ef7af1a4.png


配置类文件:


@Bean("queueC")
    public Queue queueC()
    {
        HashMap<String, Object> args = new HashMap<String, Object>();
        args.put("x-dead-letter-exchange",Y_DEAD_LETTER_EXCHANGE);
        args.put("x-dead-letter-routing-key","YD");
        //在这里没有声明TTL属性
        return  QueueBuilder.durable(QUEUE_C).withArguments(args).build();
    }
    @Bean
    public Binding queueBindingX(@Qualifier("queueC") Queue queueC,@Qualifier("xExchange") DirectExchange exchange)
    {
        return BindingBuilder.bind(queueC).to(exchange).with("XC");
    }


生产者:


@Slf4j
@RequestMapping("ttl")
@RestController
public class Produce01 {
    @Autowired
    private RabbitTemplate rabbitTemplate;
//    @GetMapping("sendMsg/{message}")
//    public void sendMsg(@PathVariable String message)
//    {
//
//        log.info("当前时间:{},发送一条消息给俩个TTL队列:{}", new Date(),message);
//        rabbitTemplate.convertAndSend("X","XA","消息来于10s"+message);
//        rabbitTemplate.convertAndSend("X","XB","消息来于40s"+message);
//    }
    @GetMapping("sendExpirationMsg/{message}/{ttlTime}")
    public void senMsg(@PathVariable String message,@PathVariable  String ttlTime)
    {
        log.info("当前时间:{},发送一条时长{}毫秒TTL信息给队列C:{}", new Date(),ttlTime, message);
        rabbitTemplate.convertAndSend("X","XC",message, correlationData ->{
            correlationData.getMessageProperties().setExpiration(ttlTime);
            return correlationData;
        });
    }
}


消费者:


@Slf4j
@Component
public class Consumer {
    @RabbitListener(queues = "QD")
    public void receiveD(Message message, Channel channel)
    {
        String s = new String(message.getBody());
        log.info("当前时间{},死信队列D接收到消息---->{}",new Date(),s);
    }
}

5a459081abab43bc964314effee3b634.png18c9cfee95344ad2abbb4456d2ad6651.png


看起来似乎没什么问题,但是在最开始的时候,就介绍过如果使用在消息属性上设置TTL的方式,消息可能并不会按时“死亡“,因为RabbitMQ只会检查第一个消息是否过期,如果过期则丢到死信队列,


如果第一个消息的延时时长很长,而第二个消息的延时时长很短,第二个消息并不会优先得到执行。


相关文章
|
Python
五分钟学 | Excel 自动化之自动画图表
五分钟学 | Excel 自动化之自动画图表
176 0
|
JavaScript Java
带你读《现代TypeScript高级教程》十三、类型兼容:协变和逆变(1)
带你读《现代TypeScript高级教程》十三、类型兼容:协变和逆变(1)
113 0
|
JavaScript 前端开发 Java
ts装饰器-元编程技巧:如何利用装饰器特性开发框架?
ts装饰器-元编程技巧:如何利用装饰器特性开发框架?
195 0
好客租房157-封装顶部导航栏组件(4添加props校验)
好客租房157-封装顶部导航栏组件(4添加props校验)
123 0
好客租房157-封装顶部导航栏组件(4添加props校验)
|
Swift
swift微博第16天(KVC字典转模型)
swift微博第16天(KVC字典转模型)
172 0
|
NoSQL Cloud Native 架构师
|
Web App开发 前端开发 JavaScript
|
8天前
|
人工智能 运维 安全
|
6天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
661 23