《RabbitMQ 实战指南》单机能力思维导图

本文详细介绍了RabbitMQ单机模式下的一些关键特性,包括消息发送定制如mandatory和immediate参数,备份交换器的使用方式及特殊情况,消息的过期时间TTL以及其与死信队列的关系。此外,还讨论了延迟队列的实现、优先级队列和RPC的实现。最后,重点阐述了消息传输的保障,如生产者确认机制、消息持久化以及消费者确认,确保消息的可靠传输。
摘要由CSDN通过智能技术生成

高清思维导图见:https://gitee.com/ryan_july/clouding_img/raw/master/img/RabbitMQ 单机.png

RabbitMQ 单机

  • 消息发送定制

    • mandatory

      • true:如果 exchange 根据自身类型和消息 routeKey 无法找到一个符合条件的 queue,那么会调用 basic.return 方法将消息返还给生产者。

      • false:出现上述情形 broker 会直接将消息扔掉。

    • immediate

      • true:如果exchange在将消息 route 到 queue(s) 时发现对应的 queue 上没有消费者,那么这条消息不会放入队列中。当与消息 routeKey 关联的所有 queue(一个或多个) 都没有消费者时,该消息会通过basic.return 方法返还给生产者。

      • 3.0 以后废弃。

      • immediate 废弃的原因,官方的解释是:该参数会影响镜像队列的性能,增加代码复杂性。建议通过 TTL(过期时间) 和 DLX(死信队列) 替代。

  • 备份交换器(Alternate Exchange)

    • 结构

    • 使用方式

      • 在声明交换器(Channel.exchangeDeclare)的时候,通过添加 alternate-exchange参数实现;

        Map args = new HashMap<>();args.put("alternate-exchange", "ae"); ​channel.exchangeDeclare("ae", "fanout", true, false, null); ​channel.exchangeDeclare("exchange_demo", "direct", true, false, args); ​channel.basicPublish("exchange_demo", "normal", null , "hello world".getBytes()); ​channel.basicPublish("exchange_demo", "normal" + "_ae", null , "hello world ae".getBytes());

      • 或者通过策略 Policy 的方式。

        rabbitmqctl set_policy AE "^exchange_demo$" '{"alternate-exchange", "ae"}';

      • 同时使用时,参数的优先更高。

    • 本质上,备份交换器只是普通交换器,只是通过指定参数,将两个交换器进行一种存在“主次”的绑定。只能从主流向次,仅针对一次绑定而言。

    • ps:当然也可以双写绑定,你中有我,我中有你。只是注意,路由键注定能匹配到一个交换器的队列,否则依然会是丢失。因此也建议,将备份交换器的类型设置为 “fanout”。

    • 特殊情况:请记住备份交换器如果出现特殊情况,不会抛异常,最终的结果必然是丢失消息

      • 备份交换器不存在,客户端和 Broker 无异常,丢失消息;

      • 备份交换器无绑定队列,同上;

      • 备份交换器无匹配队列,同上;

      • 如果和 mandatory 同时使用,mandatory 失效。其实结果就是丢失消息,因为是不会return了。

  • 过期时间TTL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值