如何使用 RabbitMQ 消息作为 "Rest Api" 来查找实体?

How to use RabbitMQ message as a "Rest Api" to find entities?

我在应用程序中遇到问题需要解决。我将展示一个例子。

我在一个系统上有一个 rabbitmq 队列,它负责 return 命令,由另一个系统调用(这些系统之间的通信只是通过消息)。在那之前,唯一可能的订单搜索是通过订单代码

效果很好。当我按订单代码搜索时,我还按合同和删除(逻辑上)的订单进行过滤。因此,如果订单没有合同或已被删除,则查询不会 return 注册。

现在,其中一个系统需要找到没有合同的订单 and/or 已删除。

基本上,我相信我需要像这样构建在 API 休息中使用的相同逻辑,但使用队列消息:

/api/orders?id=123455?deleted=true&hasContracts=true

通过消息轻松做到这一点。我只需要用这种格式发送一条消息。

{
    "code": 123,
    "deleted": true,
    "hasContract": true
}

映射 LongBoolean 类 的值。如果信息是 null,查询将忽略此过滤器,但 code 是必需的。

疑惑是:这有道理吗?我没有在 Internet 上找到有关此主题的任何信息。为每个案例创建一个队列不是一种选择,因为我们很难实现很多队列。

这对我来说很有意义;在 RabbitMQ 中使用 RPC 就像在 HTTP/gRPC/... 中使用 RPC,因此您在这里有很多选择:

  • 如果你需要很大的灵活性,你可以
    • 创建您自己的查询语言(如上例所示)
    • 使用类似 GraphQL 的东西
  • 如果您的用例有限,您可以选择使用多个路由键 (REST-over-AMQP) 来隔离 API 端点。

希望对您有所帮助。