Rabbitmq 当我可以';你不能换一个吗?

Rabbitmq 当我可以';你不能换一个吗?,rabbitmq,message-queue,Rabbitmq,Message Queue,我有一个由两个节点组成的现有系统,一个客户机/服务器模型。 我想使用RabbitMQ在它们之间交换消息。也就是说,客户机将向RabbitMQ发送所有请求,服务器将无限期地侦听队列,使用任何到达的消息,然后对其采取行动 我可以根据需要更改服务器,但我的问题是,我无法更改客户端的行为。如何将响应发送回客户端 客户端节点理解HTTP请求/响应,在将另一个应用服务器配置为RabbitMQ而不是直接配置我的应用程序之后,我应该做什么。您可以使用或使用一些内部约定,例如将结果存储在数据库(或缓存)中使用已知

我有一个由两个节点组成的现有系统,一个客户机/服务器模型。 我想使用RabbitMQ在它们之间交换消息。也就是说,客户机将向RabbitMQ发送所有请求,服务器将无限期地侦听队列,使用任何到达的消息,然后对其采取行动

我可以根据需要更改服务器,但我的问题是,我无法更改客户端的行为。如何将响应发送回客户端


客户端节点理解HTTP请求/响应,在将另一个应用服务器配置为RabbitMQ而不是直接配置我的应用程序之后,我应该做什么。

您可以使用或使用一些内部约定,例如将结果存储在数据库(或缓存)中使用已知id并轮询您的存储以获得循环结果,您必须在中间使用一个代理服务器,该代理服务器似乎将节点1(您不能更改的客户端)作为实际服务器,而它只是将请求注入队列服务器。您还必须使用2个队列

为了清楚起见,让我们列举一下系统参与者:

  • 客户
  • 代理服务器,提供与实际服务器相同的API的服务器(但它不做任何工作)
  • 实际服务器,执行实际工作的服务器
  • 输入队列,客户端请求进入的队列(代理服务器执行此操作)
  • 输出队列,服务器响应进入的队列(实际服务器执行此操作)
一种可能的工作场景:

  • 客户端向代理服务器发送请求
  • 代理服务器将请求放入输入队列
  • 实际服务器(侦听输入队列)将获取请求
  • 实际服务器处理消息
  • 实际服务器将响应发送到输出队列
  • 代理服务器(侦听输出队列)将获取响应
  • 代理服务器将响应返回给客户端
这可能会起作用,但可能会出现一些问题,例如,由于代理服务器不知道实际服务器何时响应,并且无法确定输出队列中的响应顺序,它可能必须重新注入它发现与输出队列不相关的消息,直到找到正确的消息

或者,代理服务器可能需要稍后通过HTTP请求将响应提供给客户端。也就是说,客户机不会对客户机的请求做出响应,而是希望它发送的请求不会得到响应,因为它知道稍后将通过代理服务器的请求获得答案

我不知道你那边的情况,但这可能有用