第 4 章 AMQP
AMQP 是一个开放的互联网协议,用于可靠地发送和接收消息。它受到多个软件供应商和主要机构的支持。AMQP 1.0 成为 2012 年的 OASIS 标准,而在 2014 年成为 ISO 标准。
- 带有会话多路的帧协议
- 支持 peer-to-peer 和 client-server 连接
- 为无损失数据交换提供标准类型系统
- 提供流控制、心跳和资源限制以提高分布式系统中的可靠性
- 使用空间效率的二进制编码和管道来缩短延迟
4.1. AMQP 交付保证
组合的 AMQP 模型基于消息交付的生命周期。在链接的结尾处,会创建一个代表消息传输的实体,在一定时间段内存在,最后是"settled",表示它可以忘记。在交付的组合生命周期中,有四种感兴趣的事件。
- 交付在发送发送时创建。
- 交付在接收器创建。
- 交付在发送者上被忽略。
- 交付在接收方上被忽略。
由于发送方和接收器是并发运行,因此这些事件可能会按各种顺序发生,并且这些事件的顺序会导致消息交付保证不同。
最一次交付
最大规模的交付也称为"presettled"或"fire and forget"交付。
- 交付在发送发送时创建。
- 交付在发送者上被忽略。
- 交付在接收器创建。
- 交付在接收方上被忽略。
在这种配置中,发送者在到达接收器之前(即忘记)发送,如果任何发生在 flight 中发送,则发送者没有用于重新发送的基础。
此模式适用于接受临时消息丢失的应用程序,如用于定期传感器数据,或者应用程序本身可以检测到故障并重新发送的应用程序。
at-least-once delivery
- 交付在发送发送时创建。
- 交付在接收器创建。
- 交付在接收方上被忽略。
- 交付在发送者上被忽略。
在这个配置中,接收器会在收到它时计算发送,当接收接收方后,发送者会发现接收方。如果传输中的任何内容都发生,发送者可以重新发送。但是,接收器已经忘记了发送,因此重新发送将导致重复的消息发送。应用程序可以使用唯一消息 ID 来过滤重复项。