RabbitMQ 请求/响应负载结构

gri*_*urd 2 response message-queue request rabbitmq data-structures

我正在设计一个系统,它将使用 RabbitMQ 在应用程序之间进行请求/响应。

我习惯于使用 REST API,并且从这个背景出发,我一直在思考如何在执行请求/响应时构造消息。

我需要构建它来处理几种情况:

  • 从远程服务器获取/查询数据
  • 在远程服务器上创建数据
  • 处理客户端错误

我计划将有效负载 JSON 格式化。我正在考虑使用某种类似于 HTTP 的响应代码(也许使用相同的代码?)并将响应代码设置为消息上的属性/标头。

对于获取/查询,我的想法是在有效负载对象中拥有一个查询属性。

但这让我想到,我可能认为这太像 REST API,并且可能有一些更好、更成熟的方法来做到这一点。

在进行设置时,我一直在阅读《RabbitMQ in Action》一书,但我没有看到其中提到这一点。我的 google-fu 也让我失败了,没有提供任何结果。

有经验的人愿意分享他们如何构建信息吗?

小智 6

如果您在已熟悉或已实现处理 REST 调用的应用程序中的请求/响应场景中使用 RabbitMQ,则无需在 RabbitMQ 中偏离消息格式。

从你的问题中,我了解到 RabbitMQ 充当应用程序之间的中间服务器。你提到了三种情况。如果以检索数据和写入数据为例,这里RabbitMQ仅充当请求检索或写入数据的应用程序与检索和写入数据的应用程序之间的路由器。如果是这样,则已经存在服务应用程序(具有数据的服务器)可以支持的标准消息格式。假设尚未定义标准。在这种情况下,您可以考虑应用程序在请求负载中期望的内容。在此阶段忘记中间的 RabbitMQ 服务器。考虑 RabbitMQ 消息可能会让您偏离最佳实践。

对于客户端错误,您不能直接将 HTTP 状态代码设置为标头,因为这会干扰消费者中的 RabbitMQ 错误。我相信,在这种情况下,您必须通过传递自定义标头并稍后将其转换为 HTTP 状态代码来使用自定义。