c# - 使用 RabbitMQ 的 .NET Core 微服务

标签 c# asp.net-web-api .net-core microservices rawrabbit

<分区>

我打算在一个项目中使用微服务架构。选择的技术堆栈是 .NET Core,带有 DockerRabbitMQ 作为简单的服务总线,这应该能够部署在 Linux 上

假设我有一个Payment 服务和一个Order 服务,我希望这些服务中的每一个都公开REST 端点。因此,我想到将这两个服务作为 .NET Core Web APIs

但问题是使用RabbitMQ 的服务间通信。每当我收到新的订单时,我想使用RabbitMQ 发布一个事件,然后在Payment 服务中监听该事件以执行某些操作(数据库更新)。但由于这些是 Web API,我认为不可能像我描述的那样监听事件。 (我觉得我可能不得不使用类似控制台应用程序的东西来订阅事件。)

考虑到系统的可伸缩性和可扩展性,我想使用最佳实践找到最可行的方法来实现这一目标。

最佳答案

当您使用 .NET Core 创建应用程序时,您会在 Main 方法中引导事物,然后在 Startup 类中注册服务和中间件。因此,在您启动虚拟主机之前,您还可以创建并启动您的消息服务:

public class MessageListener
{
    public void Start()
    {
        // Listen to rabbit QM and all the things.
    }
}

public static void Main(string[] args)
{
    // Listen to messages.
    var messaging =  MessageListener();
    messaging.Start();

    // Configure web host and start it.
    var host = new WebHostBuilder()
        ...
        .Build();
    host.Run();
}

更新:

在 ASP.NET Core 2.0 中引入了 IHostedService 接口(interface)来实现相同的目标,他们在他们的 announcement 中提到了这种情况。 .这是 an example如何实现。

关于c# - 使用 RabbitMQ 的 .NET Core 微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489589/

相关文章:

c# - ASP NET MVC Web API 架构

c# - 应用程序引发了未处理的异常。系统无效操作异常: Unable to > resolve service for type

c# - 具有分层组织角色的应用程序角色

c# - 在 HttpContext.Current.Request 中模拟 ServerVariables

angularjs - Web API 通过 URL 加载,但从 Angular 脚本中获取错误 404

c# - 如何调试哪个线程在 Linux 上的 .NET Core 进程中锁定了对象?

azure - 如何在 Azure Durable Functions 中使用依赖注入(inject)?

c# - asp.net mvc 2 RC 是否已准备好投入生产

c# - 创建插件应用程序的方法

azure - 将应用程序功能服务总线触发器切换为 ReceiveAndDelete 模式而不是 PeekLock