【问题标题】:Microservice and RabbitMQ微服务和 RabbitMQ
【发布时间】:2017-05-08 05:46:31
【问题描述】:

我是微服务新手,对 RabbitMQ / EasyNetQ 有疑问。 我正在从一个微服务向另一个微服务发送消息。

每个微服务都是 Web API。我正在使用 CQRS,我的命令处理程序将使用队列中的消息并执行一些业务逻辑。为了调用处理程序,它需要向 API 方法发出请求。

我想知道,无需显式调用 API 端点来访问代码以使用消息。是否有一种无需调用 API 端点的自动化方式?

建议可以创建一个单独的解决方案,它是一个控制台应用程序,它将执行 RabbitMQ 以开始侦听。创建一个while循环来读取消息,然后每次有新消息发送到队列时调用web api端点来处理业务逻辑。

我的目标是创建一个侦听器或启动任务,一旦消息在队列中,它将自动从队列中提取它并继续命令处理程序,但不确定如何按照我描述的“自动”方式执行.我正在考虑使用将持续运行的 Azure Webjob,它将充当消费者。
寻找一种良好的架构方式。

使用的编程语言是 C#

非常感谢

【问题讨论】:

  • 您使用什么语言和框架?您的问题对挑战的技术细节非常低。如果您可以在代码中添加更多详细信息并更详细地突出问题,也许我可以提供帮助。
  • 我正在使用 C# .Net 框架。寻找在连续任务运行器上解耦消费者的最佳方法。

标签: asp.net-web-api architecture rabbitmq microservices easynetq


【解决方案1】:

托管 RabbitMQ 订阅者的推荐方法是使用类似topshelf 库的东西编写一个 Windows 服务,并在该服务启动时订阅该服务内的总线事件。我们在多个项目中做到了这一点,没有任何问题。

如果您使用的是 Azure,托管 RabbitMQ 订阅者的最佳位置是“工作者角色”。

【讨论】:

    【解决方案2】:

    我正在使用 CQRS,我的命令处理程序将使用消息关闭 Queue 并做一些业务逻辑。为了调用处理程序,它 将需要向 API 方法发出请求。

    你确定这是真正的 CQRS 吗?当您在域逻辑中以不同方式处理查询和命令时,就会出现 CQRS。通过调用 CommandHandler 的 calss 接收消息并对其做出反应还不是 CQRS。

    我的目标是创建一个侦听器或启动任务,其中一旦消息 在队列中,它将自动从队列中提取它并 继续使用命令处理程序,但不确定如何执行“自动” 正如我所描述的那样。我正在考虑使用 Azure Webjob 持续运行,它将充当消费者。寻找 一种很好的架构方式。

    你越容易做到这一点越好。在尝试所有简单的解决方案之前,不要去寻找复杂的解决方案。当我实现类似的东西时,我只是使用 Linux cron 运行一个消息处理程序脚本池。处理程序从队列中弹出一条消息,对其进行处理并终止。很简单。

    【讨论】:

      【解决方案3】:

      我认为使用 CQRS 模式,您也将拥有事件和相应的事件处理程序。当您使用 RabbitMQ 在命令和查询之间进行异步通信时,任何放在 RabbitMQ 特定通道上的消息都可以通过回调方法进行侦听

      从队列接收消息更复杂。它通过将回调函数订阅到队列来工作。每当我们收到消息时,Pika 库都会调用此回调函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-12
        • 2016-12-20
        • 2019-05-28
        • 2021-04-25
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 2017-09-15
        相关资源
        最近更新 更多