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

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

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

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

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

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

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

死信队列

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

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

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

过期时间

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

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

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

效果演示

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

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

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

延迟队列

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

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

插件可以在这里找到

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

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

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

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

标签:
  • 热门焦点
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
Top