相关ID和投放代码有什么区别

时间:2020-10-18 15:32:59

标签: rabbitmq message-queue

我一直在寻找关于这两者之间区别的很好的解释, 但没有真正找到一个。

到目前为止,我所知道的是: 相关性ID是一个字符串(已转换为字符串的Guid),而传递标签是一个整数。 每个邮件的相关性ID都是唯一的,而传递标签仅在 通道(通道是作用域)。

很好。...但是目的有什么不同?为什么我们需要一条消息的两个标识符?

2 个答案:

答案 0 :(得分:1)

这两个标识符存在于两个不同的通信概念层,并且具有在每种情况下都有用的不同属性。虽然可以设计一种协议,而该标识符具有一个用于这两个目的的标识符,但将它们分开可以使这两种实现都更加简单。

投放代码

  • RabbitMQ本身内置的AMQP通信层的一部分。
  • 示例用法:a consumer process can acknowledge that a message has been processed,并且可以在代理(RabbitMQ服务器)上永久丢弃。
  • 在开放渠道中为每条传递的邮件自动分配
  • 必须在该通道内必须唯一,以便协议正确运行。 not 在不同渠道上是否需要唯一,因此,简单的递增整数易于实现。
  • 同一条消息可能在不同的时间使用不同的传递标签传递,甚至存在于多个队列中并同时传递给不同的使用者。

相关ID

  • 正在使用RabbitMQ的应用程序的部分逻辑,而不是代理本身。
  • 使用示例:在两个单独的消息上使用匹配的相关ID并“回复”,应用程序希望将其视为RPC模式中的请求和响应。
  • 第一次创建消息时需要手动添加,并且是可选的。
  • 协议不保证其唯一,该协议只是将其视为任意字符串。应由应用程序以一种不太可能在其用例中发生冲突的方式生成,例如适当形式的UUID。
  • 每次传递邮件时,无论转发或复制到多个队列中多少次,都将保持不变。

答案 1 :(得分:0)

Correlation ID通常在RabbitMQ的上下文中使用,当我想查看发送消息的同步行为时,响应该消息的另一个发送者将发送响应,但在Reply-to标记中将具有relatedID。在RabbitMQ中复制的常见模式是RPC调用,它更像是同步消息传递。

但是,传递标记是每个通道的消息传递的指示器,通常在遵循“确认传递”模型时会进入作用域。

两者的用途完全不同,因此不是消息标识符。