【问题标题】:RabbitMQ as both Producer and Consumer in a single applicationRabbitMQ 在单个应用程序中同时作为生产者和消费者
【发布时间】:2020-09-23 20:48:14
【问题描述】:

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

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

谁能解释一下?谢谢。

【问题讨论】:

    标签: rabbitmq amqp


    【解决方案1】:

    很简单:

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

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

    还有很多其他原因......

    【讨论】:

    • 兔子如何知道将消息推送到哪个消费者实例?它知道线程何时可用吗?
    • 附加问题:在我的应用程序中使用 Rabbit 发送邮件是否有效?我的意思是 - 在用户注册后,我会向兔子队列发送一条消息,向我的新用户发送一封欢迎电子邮件。然后在同一个应用程序中,我有一个该消息的侦听器,它实际上执行电子邮件发送。我将 rabbit 重试次数设置为 3,如果失败,我将其放入死信队列中,以便在控制台中手动分析。这是一个有效的用例并且有意义吗?
    • 当然,这是一个完美的用例!
    • 关于你的第一个问题,如果更多的消费者正在消费同一个队列,你无法预测哪个消费者会真正消费下一条传入的消息。无论如何,多个消费者可以并行消费同一个队列。
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多