当前位置:首页 > 科技  > 软件

RabbitMQ代码篇之过期时间,死信队列,延迟队列,优先级队列的基本使用

来源: 责编: 时间:2024-03-18 09:38:28 108观看
导读这篇是 代码篇 ,略过 Direct,Fanout,Topic 这几种基本队列的使用介绍,但是 Github 仓库上可以查看到的。图片<( ̄︶ ̄)↗[GO!]冲冲冲~死信队列死信是指有这三个特点的消息消息被拒绝,且没有重新入队(投递)消息过期消息队列满了// n

这篇是 代码篇 ,略过 Direct,Fanout,Topic 这几种基本队列的使用介绍,但是 Github 仓库上可以查看到的。LRF28资讯网——每日最新资讯28at.com

图片图片LRF28资讯网——每日最新资讯28at.com

<( ̄︶ ̄)↗[GO!]LRF28资讯网——每日最新资讯28at.com

图片冲冲冲~LRF28资讯网——每日最新资讯28at.com

死信队列

死信是指有这三个特点的消息LRF28资讯网——每日最新资讯28at.com

  • 消息被拒绝,且没有重新入队(投递)
  • 消息过期
  • 消息队列满了
// nack 返回 false,并放弃重新回到队列channel.basicNack(deliveryTag, false, false);//拒绝,不重新入队列channel.basicReject(deliveryTag, false);

死信交换机 —— DLX:Dead-Letter-ExchangeLRF28资讯网——每日最新资讯28at.com

@Beanpublic DirectExchange directExchange2() {    /**     * 交换机名,后面两个是默认值就:持久化,不自动删除     */    return new DirectExchange(RabbitMQConstants.DIRECT_EXCHANGE2, true, false);}@Beanpublic Queue directQueue2() {    return QueueBuilder            .durable(RabbitMQConstants.DIRECT_QUEUE2)            .deadLetterExchange(RabbitMQConstants.DLX_EXCHANGE)            .deadLetterRoutingKey(RabbitMQConstants.DLX_ROUTING_KEY)            .build();}/** * 将队列绑定到交换机上 * * @return */@Beanpublic Binding directBinding2() {    return BindingBuilder.            bind(directQueue2()).            to(directExchange2()).            with(RabbitMQConstants.DIRECT_BINDING_KEY2);}

过期时间

两种设置方式LRF28资讯网——每日最新资讯28at.com

  • 创建队列时设置,消息会被排序加入到队列头部,短的在前
  • 发送消息时设置,时间到期不会立刻删除,而是在推送消息时删除

同时设置的话,过期时间已短的为准LRF28资讯网——每日最新资讯28at.com

/** * 创建队列时设置 * @return */@Beanpublic Queue ttlQueue() {    Map<String, Object> args = new HashMap<>();    //设置消息过期时间    args.put("x-message-ttl", 5000);    //设置死信交换机    args.put("x-dead-letter-exchange", RabbitMQConstants.DLX_EXCHANGE);    //设置死信 routing_key    args.put("x-dead-letter-routing-key", RabbitMQConstants.DLX_ROUTING_KEY);    return new Queue(RabbitMQConstants.TTL_QUEUE, true, false, false, args);}
/** * 发送消息时设置 * @return */public void sendMessage2() throws JsonProcessingException {    User user = new User();    ObjectMapper objectMapper = new ObjectMapper();    byte[] bytes = objectMapper.writeValueAsBytes(user);    // 10 s 后过期    Message message =            MessageBuilder.withBody(bytes)                    .setExpiration("10000").build();    // 交换机,路由键,信息    rabbitTemplate.convertAndSend(            RabbitMQConstants.DIRECT_EXCHANGE2,            RabbitMQConstants.DIRECT_ROUTING_KEY2,            message    );}

效果演示

图片图片LRF28资讯网——每日最新资讯28at.com

队列 5 秒延迟的效果LRF28资讯网——每日最新资讯28at.com

图片图片LRF28资讯网——每日最新资讯28at.com

延迟队列

两种方案实现LRF28资讯网——每日最新资讯28at.com

  • 利用 死信队列+过期时间 去处理,消息过期被转发到死信交换机,死信交换机路由到死信队列进行处理
  • 使用插件 rabbitmq_delayed_message_exchange

插件可以在这里找到

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-76494-0.htmlRabbitMQ代码篇之过期时间,死信队列,延迟队列,优先级队列的基本使用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 关于Java程序服务预热那些事

下一篇: 想进阿里?先搞懂Spring Bean的循环依赖!

标签:
  • 热门焦点
Top
Baidu
map