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

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

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

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

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

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

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

死信队列

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

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

死信交换机 —— DLX:Dead-Letter-ExchangegSd28资讯网——每日最新资讯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);}

过期时间

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

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

同时设置的话,过期时间已短的为准gSd28资讯网——每日最新资讯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    );}

效果演示

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

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

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

延迟队列

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

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

插件可以在这里找到

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

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

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

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

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    &copy;自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top