为请求响应模型选择 RabbitMq Exchange 类型

Choosing RabbitMq Exchange Type for Request Reponse Model

我们正在将现有架构迁移到基于 queue 的架构。我们的系统包含一个连接到 300 多个 KIOSK 系统的中央服务器,其中数据同步是基于 sql 的 CRUD 操作。

我们决定创建一个交换和一个 queue 用于集中服务,并使用 header 绑定创建一个具有多个 queue 的交换(对于每个 KIOSK)。

KIOSK 始终启动同步(由于法律问题的限制)。所以我们决定使用Request/Response模型。

问题是,我们能否为这个 Request/Response 模型使用基于 header 的交换绑定。

如果我没理解错的话,你的信息亭会向中央服务器发送一条消息,它需要响应 header 交换,后者将消息路由到 queue 专用于该信息亭的消息.每个信息亭都使用来自其专用 queue.

的消息

假设您根据 StoreLocationId 和 KioskId 进行绑定。当信息亭将其消息发送到中央服务器时,它确保消息中包含 StoreLocationId 和 KioskId。中央服务器执行它需要做的事情,并向响应消息添加两条消息 headers:StoreLocationId 和 KioskId 以及它从 Kiosk 接收到的值。发送到 header 交换的响应现在将正确路由到所需的信息亭。

我应该注意,您也可以使用主题交换并使用像 LocationId_KioskId 这样的路由密钥。或者,如果您的信息亭 queue 遵循标准命名约定(可以从请求消息中包含的数据派生),则使用默认交换。

从安全的角度来看,也许默认交换是最好的,因为信息亭无法设置允许它们使用来自多个其他信息亭的消息的绑定。使用默认交换时,只有一个自助服务终端会收到响应。