我即将弄清楚rabbitmq的功能。
假设我有10个客户端,每个客户端都有一个位于防火墙或其他安全层后面的数据库(因此无法直接访问数据库中的数据)。
现在如何使用rabbitMQ从每个客户端的数据库接收数据?
我的想法是创建一个rabbitmq服务器和一个监听器。每个客户端都有一个该监听器的副本。因此,为了从客户端检索数据,我将向客户的监听器发送消息并等待响应。
但我无法弄清楚如何实现等待响应部分?据我所知,我需要实现RPC调用,但这意味着每个客户端都需要一个自己的队列?
有没有人实现过这样的功能?
答案 0 :(得分:1)
我认为您想要解决个别客户问题。
如你所说,你可以使用专用队列。在这样的设计中,即使离线,您的客户也可以回复请求:一旦他们启动并连接到RabbitMQ,他们就会找到请求并回答它们。
如果你想让客户端只在线回复,我会选择一种不同的方法:使用主题交换,让每个客户端与一个临时队列绑定,并使用与发布主题匹配的消息 - 例如主题可能是(或可能包含)客户端的主机名:只有被寻址的客户端才会使用它。
在这两种情况下,客户都需要回复请求。最简单的方法是让请求者创建一个临时队列,并在请求中指定它,在消息的“reply-to”属性中,如tutorial所示。
客户端将回复使用本地数据库内容填充消息并向此队列发送消息。
因此,要从客户端检索数据,我将向客户端发送消息 倾听并等待回应。
处理消息时,你永远不会等待:你只是“对消息做出反应”。将设置请求者消费来自“回复”队列的消息。当响应到达那里时,请求者将采取行动。