【发布时间】:2022-01-19 23:48:24
【问题描述】:
我试图更好地理解使用一般队列特别是 RabbitMQ 设计分布式系统的细微差别。
假设我有类似的消息
{
"id": 12,
"name": “John”
"role": “Employee”
}
和
{
"id": 13,
"name": “Alex”,
"role": “Manager”,
"level": 1
}
注意 role 属性。
当每个人完成对文档的签名后,发布者将发送上述消息。消费者应该根据个人的角色做不同的事情。
设计方法
-
消息是否应该进入直接交换(没有路由键)并最终进入1队列?消费者需要收听一个队列,因此它有责任识别演员的哪种类型(基于角色)签署了一份文档。
-
消息是否应该进入直接交换(使用路由键)并最终进入2个不同的队列?发布者可以使用 2 个不同的路由键发布消息。 RabitMQ 可以处理路由。消费者将收听 2 个不同的队列。这种方法无需在消息中使用角色属性。
-
这是否应该转到主题交换(使用路由密钥)并最终转到 2 个不同的队列?这也消除了在消息中具有角色属性的需要。在这种情况下,交换类型是不同的。
我的问题
当我们最终在消息中包含类型(在我的示例角色属性中)并强制消费者只听一个队列时,这是一个糟糕的设计吗?还是更好地利用 RabbitMQ 的路由密钥功能,并且永远不要在消息中保留标识属性?
【问题讨论】:
标签: rabbitmq message-queue distributed-system