使用RabbitMQ的.NET核心微服务

PIK*_*IKP 10 c# asp.net-web-api microservices .net-core rawrabbit

我计划将微服务架构用于项目.所选择的技术堆栈.NET CoreDockerRabbitMQ作为一个简单的服务总线,这应该能够部署上Linux.

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

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

考虑到系统的可扩展性和可扩展性,我想找到最可行的方法来实现这一点.

And*_*nov 11

使用.NET Core创建应用程序时,可以在Main方法中引导程序,然后在Startup类中注册服务和中间件.因此,在启动Web主机之前,您还可以创建和启动消息传递服务:

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();
}
Run Code Online (Sandbox Code Playgroud)

更新:

在ASP.NET Core 2.0 IHostedService中引入了接口来实现相同的目标,他们在公告中提到了这个场景.以下是如何实现一个示例.

  • 这就是我在项目中的表现.微服务的想法是实现有界上下文(子域或其中的一部分).它应该有一个域模型,可以从web api控制器或消息处理程序访问. (2认同)