您的问题似乎是混合了两种不同的概念模型。
“服务器需要获取客户端的请求并向客户端发送响应” - 简而言之,这就是 Web 通常使用的“客户端-服务器”范例/架构应用程序,其中客户端是浏览器(“请给我看这个网页”),网络应用程序是服务器(“好的,这是您请求的那个页面”)。
Rabbit 支持一种非常不同的范例/架构(消息传递),其中(通常)生产者在消息自然发生时生成消息(不是基于任何请求)。这些消息位于一个或多个队列中,等待订阅这些队列的人(消费者)使用。消费者通常不会向服务器发送请求;相反,它会定期检查队列中是否有任何新消息 - 然后使用它们。
您使用哪种范例取决于您的网络应用程序的用途。您的应用甚至可以同时使用这两种范式。
更新
“您能否举一个使用消息传递范式的示例?我无法想象没有请求和响应的网站是如何工作的。”
当您说“网站”时,我假设您指的是显示在浏览器中的网页,由运行在服务器上的 Web 应用程序提供。那么,在这种特定情况下,是的,标准方法是“客户端-服务器”模型。通常不涉及消息传递。消息传递不适合这种类型的模型。客户端-服务器是一个很好的模型。
但是想象一下将这些网页发送到浏览器的“网络应用程序”。 Web 应用程序很有可能也提供附加服务,而不是通过网页请求直接访问。一种这样的服务可能是基于消息的:应用程序产生消息——例如,与应用程序相关的事件的通知。用户可以使用这些消息。
一个非常粗略的例子:想象一个拍卖网站。您可以登录该网站并查看可以出价购买商品的网页。
但您可能还希望收到消息(例如通过短信),告诉您何时有其他人对您感兴趣的特定项目进行了新的出价。您不希望不断刷新网络获取最新数据的页面;而且您不希望收到有关每种产品的每次出价的更新。这更适合不同类型的客户端 - 不是请求网页的客户端,而是使用消息的客户端。
所以,我也无法想象一个 网站 使用消息传递来提供网页(尽管我敢打赌某个地方有人已经建立了它)。但我可以想象一个基于 Web 的应用程序,它服务于网页(客户端-服务器)并且可能还产生消息。或者是基于 Web 的应用程序,它会生成消息,甚至可能根本没有任何网页。
您的producer.js 是一个程序的小例子,它只是一个消息生产者。您的consumer.js 程序是一个小程序示例,它只是一个消息使用者。位于它们之间的是消息代理程序 (Rabbit),它是队列存在的地方,也是消息发送(和检索)的地方。