RabbitMQ 在单个应用程序中同时作为生产者和消费者

RabbitMQ as both Producer and Consumer in a single application

我目前正在学习 RabbitMQ 和 AMQP。我开始使用我在网上找到的一些教程,它们都或多或少地展示了相同的示例——一个 Spring 启动 Web 应用程序,在 REST 调用时,生成一条消息并放入 RabbitMQ 队列,然后,来自同一个应用程序的另一个 class,它被配置为该消息的消费者使用它并处理处理程序方法。

我无法理解为什么这有任何好处。我理解的好处是处理程序在单独的线程中执行,而控制器方法可以 return 在将消息发送到队列后立即执行。但是,为什么这会比仅在该处理程序方法上使用 Spring 的 @Async 注释并显式调用它更好呢?在那种情况下,我想我们会实现同样的事情,而不必托管和管理像 RabbitMQ 这样的消息代理的单独实例。

有人可以解释一下吗?谢谢

非常简单:

  1. 使用 RabbitMq,您可以获得持久消息和更加安全和一致的异常管理。万一机器死机,已经推送的消息不会丢失。

  2. 可以将消息推送到交换器并由更多并行消费者使用,这有助于在消费者代码太慢的情况下扩展应用程序。

还有很多其他原因...