如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?

Posted

技术标签:

【中文标题】如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?【英文标题】:How to use MassTransit Event Bus in a ASP.NET Core Web API? 【发布时间】:2018-12-22 23:35:56 【问题描述】:

按照https://masstransit-project.com/usage/configuration.html的指令配置MassTransit后

你如何在

中使用(发布/订阅)它
    一个 ASP.NET Core Web API 控制器? 在接口服务中?

namespace App1.Message.API

    public class Startup
    
        .....
        private IContainer container  get; set; 

        public IServiceProvider ConfigureServices(IServiceCollection services)
        
           ......
            var builder = new ContainerBuilder();
            builder.Register(c =>
            
                return Bus.Factory.CreateUsingRabbitMq(sbc =>
                    sbc.Host("localhost", "/", h =>
                    
                        h.Username("guest");
                        h.Password("guest");
                    )
                );
            )
            .As<IBusControl>()
            .As<IBus>()
            .As<IPublishEndpoint>()
            .SingleInstance();
            builder.Populate(services);
            container = builder.Build();
            return new AutofacServiceProvider(container);
        

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)
        
            ......
            //resolve the bus from the container
            var bus = container.Resolve<IBusControl>();
            //start the bus
            var busHandle = TaskUtil.Await(() => bus.StartAsync());

            //register an action to call when the application is shutting down
            lifetime.ApplicationStopping.Register(() => busHandle.Stop());
        
    

【问题讨论】:

【参考方案1】:
    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    
        private readonly IPublishEndpoint _publishEndpoint;

        public WeatherForecastController(IPublishEndpoint publishEndpoint)
        
            _publishEndpoint = publishEndpoint;
        
    

ConfigureServices 中注册依赖项,因此,在应用程序的其他部分,所有注册的服务都可以通过构造函数上的依赖项注入来解决。

【讨论】:

以上是关于如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?

如何在 asp.net core web api 中绑定 Json Query 字符串

ASP.NET Core Web API - 如何在中间件管道中隐藏 DbContext 事务?

Asp.Net Core Web API 应用程序:如何更改监听地址?

如何在 ASP.NET Core Web API 中添加两个不同的令牌