10

我计划在一个项目中使用微服务架构。.NET Core选择的Docker技术栈是RabbitMQ一个简单的服务总线,它应该能够部署在Linux.

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

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

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

4

1 回答 1

11

当您使用 .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.0IHostedService中引入了接口以实现相同的目标,他们在公告中提到了这种情况。这是一个如何实现的示例。

于 2017-04-19T08:42:44.540 回答