Rabbitmq 关联id和传递标签之间的区别是什么
我一直在寻找一个很好的解释来解释这两者之间的区别, 但并没有真正找到一个 我现在知道的是: 关联id是一个字符串(Guid已转换为字符串),传递标记是一个int。 相关id对于每条消息都是唯一的,而传递标记仅在 通道(通道就是作用域)Rabbitmq 关联id和传递标签之间的区别是什么,rabbitmq,message-queue,Rabbitmq,Message Queue,我一直在寻找一个很好的解释来解释这两者之间的区别, 但并没有真正找到一个 我现在知道的是: 关联id是一个字符串(Guid已转换为字符串),传递标记是一个int。 相关id对于每条消息都是唯一的,而传递标记仅在 通道(通道就是作用域) 那很好……但是目的有什么不同呢?为什么一条消息需要两个标识符?当我想看到一个同步行为时,通常在RabbitMQ的上下文中使用相关ID,在同步行为中发送一条消息,另一个发送者将发送响应,但在回复标记中会有correlationID。在RabbitMQ中复制的常见模式
那很好……但是目的有什么不同呢?为什么一条消息需要两个标识符?当我想看到一个同步行为时,通常在RabbitMQ的上下文中使用相关ID,在同步行为中发送一条消息,另一个发送者将发送响应,但在回复标记中会有correlationID。在RabbitMQ中复制的常见模式是RPC调用,它更像同步消息传递 然而,Delivery标记是每个通道消息传递的指示器,通常在遵循已确认的传递模型时出现
两者的用途完全不同,并非消息标识符。这两个标识符存在于通信的两个不同概念层,并具有在每种情况下都有用的不同属性。虽然可以设计一个协议,让一个标识符同时为两个目的服务,但将它们分开会使两种实现更简单 送货标签
- AMQP通信层的一部分,内置于RabbitMQ本身
- 示例用法:并且可以在代理(RabbitMQ服务器)上永久丢弃
- 在开放频道内为每一条发送的邮件自动分配
- 必须在该通道内唯一,协议才能正常运行。在不同的通道中不需要是唯一的,因此简单的递增整数很容易实现
- 同一消息可能在不同的时间使用不同的传递标签传递,甚至存在于多个队列中,并同时传递给不同的消费者
- 使用RabbitMQ的应用程序逻辑的一部分,而不是代理本身
- 示例用法:在两条单独的消息上使用匹配的相关ID和“reply to”,应用程序希望将其视为RPC模式中的请求和响应
- 需要在首次创建消息时手动添加,并且是可选的
- 协议不能保证它是唯一的,它只是将它视为一个任意字符串。这取决于应用程序以不太可能与其用例发生冲突的方式生成,例如UUID的适当形式
- 无论消息被转发或复制到多个队列中多少次,每次传递消息时都将保持不变