设计RPC样式体系结构以对各个客户端执行查询

时间:2018-01-18 13:58:18

标签: c# rabbitmq

我即将弄清楚rabbitmq的功能。

假设我有10个客户端,每个客户端都有一个位于防火墙或其他安全层后面的数据库(因此无法直接访问数据库中的数据)。

现在如何使用rabbitMQ从每个客户端的数据库接收数据?

我的想法是创建一个rabbitmq服务器和一个监听器。每个客户端都有一个该监听器的副本。因此,为了从客户端检索数据,我将向客户的监听器发送消息并等待响应。

但我无法弄清楚如何实现等待响应部分?据我所知,我需要实现RPC调用,但这意味着每个客户端都需要一个自己的队列?

有没有人实现过这样的功能?

1 个答案:

答案 0 :(得分:1)

我认为您想要解决个别客户问题。

如你所说,你可以使用专用队列。在这样的设计中,即使离线,您的客户也可以回复请求:一旦他们启动并连接到RabbitMQ,他们就会找到请求并回答它们。

如果你想让客户端只在线回复,我会选择一种不同的方法:使用主题交换,让每个客户端与一个临时队列绑定,并使用与发布主题匹配的消息 - 例如主题可能是(或可能包含)客户端的主机名:只有被寻址的客户端才会使用它。

在这两种情况下,客户都需要回复请求。最简单的方法是让请求者创建一个临时队列,并在请求中指定它,在消息的“reply-to”属性中,如tutorial所示。

客户端将回复使用本地数据库内容填充消息并向此队列发送消息。

  

因此,要从客户端检索数据,我将向客户端发送消息   倾听并等待回应。

处理消息时,你永远不会等待:你只是“对消息做出反应”。将设置请求者消费来自“回复”队列的消息。当响应到达那里时,请求者将采取行动。