理解rabbitmq中的生产者和接收者

Understand the producer and receiver in rabbitmq

我正在尝试使用 rabbitmq 和 express 构建 Web 应用程序。我对生产者和接收者很困惑。

教程说

Producing means nothing more than sending. A program that sends messages is a producer, Consuming has a similar meaning to receiving. A consumer is a program that mostly waits to receive message.

那是不是意味着服务器应该既是生产者又是接收者?因为服务器需要得到客户端的请求,并向客户端发送响应。如果是这样,为什么我们需要分别 运行 2 个脚本(producer.js 和 receiver.js)?

谢谢

您的问题似乎混合了两种不同的概念模型。

“服务器需要获取客户端的请求,并向客户端发送响应” - 简而言之,就是“客户端-服务器”paradigm/architecture,通常由 Web 应用程序使用,其中客户端是浏览器(“请显示此网页”),而 Web 应用程序是服务器(“好的,这是您请求的页面”)。

Rabbit 支持非常不同的 paradigm/architecture(消息传递),其中(通常)生产者在自然发生时生成消息(不基于任何请求)。这些消息位于一个或多个队列中,等待订阅这些队列的人(消费者)使用。消费者通常不会向服务器发送请求;相反,它会定期检查队列中是否有任何新消息 - 然后使用它们。

您使用哪种范式取决于您的 Web 应用程序的用途。您的应用甚至可以同时使用这两种范例。


更新

"你能举一个使用消息范式的例子吗?我无法想象一个网站在没有请求和响应的情况下是如何工作的。"

当您说“网站”时,我假设您指的是显示在浏览器中的网页,由服务器上的 Web 应用程序 运行 提供。那么,在那种特定情况下,是的,标准方法是“客户端-服务器”模型。通常不涉及消息传递。消息传递不适合这种类型的模型。客户端-服务器是一个很好的模型。

但想象一下将这些网页发送到浏览器的“网络应用程序”。 Web 应用程序很可能 also 提供 additional 服务,而不是通过网页请求直接访问。其中一种服务可能是基于消息传递的:应用程序生成消息——例如,与应用程序相关的事件通知。用户可以使用这些消息。

一个非常粗略的例子:想象一个拍卖网站。您可以登录到该站点并查看可以对购买项目进行出价的网页。

但您可能还希望收到消息(例如通过短信),告诉您何时有其他人对您感兴趣的特定项目进行新的出价。您不想不断刷新获取最新数据的网页;并且您不希望收到有关每种产品的每次出价的更新。这更适合不同类型的客户端 - 不是请求网页的客户端,而是使用消息的客户端。

所以,我也无法想象 网站 使用消息传递来提供网页(尽管我敢打赌某个地方已经有人建立了)。但我可以想象一个基于 Web 的应用程序,该应用程序提供网页(客户端-服务器)并且可能还会生成消息。或生成消息的基于 Web 的应用程序,甚至可能根本没有任何网页。

您的 producer.js 是一个仅作为消息生成器的程序的小例子。您的 consumer.js 程序只是消息消费者程序的一个小例子。位于它们之间的是消息代理程序 (Rabbit),它是队列存在的地方,也是发送(和检索)消息的地方。