C# MassTransit RabbitMQ AspNetCore未启动总线并注册接收端点

C# MassTransit RabbitMQ AspNetCore未启动总线并注册接收端点,c#,asp.net-core,.net-core,masstransit,C#,Asp.net Core,.net Core,Masstransit,我已经为此奋斗了几个小时,但我似乎无法让它发挥作用,尽管我似乎在复制文档 我正在使用新的MassTransit AspNetCore软件包注册我的公交车和消费者,但它似乎没有启动公交车!如果我通过代码添加断点,则注册接收端点,它永远不会被命中(但AddBus部分会被命中),并且不会创建交换/队列 值得注意的是,这只是一个在IIS中运行的Web API,也有正常的rest端点(我不知道这是否重要) 我的代码如下: services.AddMassTransit(x => { x.Ad

我已经为此奋斗了几个小时,但我似乎无法让它发挥作用,尽管我似乎在复制文档

我正在使用新的MassTransit AspNetCore软件包注册我的公交车和消费者,但它似乎没有启动公交车!如果我通过代码添加断点,则注册接收端点,它永远不会被命中(但AddBus部分会被命中),并且不会创建交换/队列

值得注意的是,这只是一个在IIS中运行的Web API,也有正常的rest端点(我不知道这是否重要)

我的代码如下:

services.AddMassTransit(x =>
{
    x.AddConsumer<SelectAllAccessibleConsumer>();

    x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
    {
        var host = cfg.Host(new Uri(rabbitMqMessageBus.Host), rabbitMqMessageBus.Username,
            hostConfigurator =>
            {
                hostConfigurator.Username(rabbitMqMessageBus.Username);
                hostConfigurator.Password(rabbitMqMessageBus.Password);

                if (rabbitMqMessageBus.UseSsl)
                {
                    hostConfigurator.UseSsl(s => { s.Protocol = SslProtocols.Tls12; });
                }
            });

        cfg.ReceiveEndpoint(host, "queue-name", ep =>
        {
            ep.PrefetchCount = 16;
            ep.UseMessageRetry(r => r.Interval(2, 100));
            ep.ConfigureConsumer<SelectAllAccessibleConsumer>(provider);
        });
    }));
});
services.AddMassTransit(x=>
{
x、 AddConsumer();
x、 AddBus(provider=>Bus.Factory.CreateUsingRabbitMq(cfg=>
{
var host=cfg.host(新Uri(rabbitMqMessageBus.host)、rabbitMqMessageBus.Username、,
主机配置器=>
{
hostConfigurator.Username(rabbitMqMessageBus.Username);
hostConfigurator.Password(rabbitMqMessageBus.Password);
if(rabbitMqMessageBus.UseSsl)
{
hostConfigurator.UseSsl(s=>{s.Protocol=SslProtocols.Tls12;});
}
});
ReceiveEndpoint(主机,“队列名称”,ep=>
{
ep.PrefetchCount=16;
ep.UseMessageRetry(r=>r.Interval(2100));
ep.配置消费者(提供商);
});
}));
});

我忍不住觉得我错过了一些非常明显的东西,但就我的一生而言,我无法找到它

您需要实际启动总线,在您的场景中,这应该使用托管服务来完成。您可以在此处看到示例:

然后,添加到您的配置中:

services.AddSingleton<IHostedService, MassTransitConsoleHostedService>();
services.AddSingleton();

实际上,IServiceHost注册包含在库中,尽管文档中没有提到它。 需要使用扩展名:

services.AddMassTransitHostedService()

谢谢克里斯,我知道会是这样的,但在文档中找不到!奇怪的是,他们在文档中提到该软件包包含此启动功能:<代码>该软件包包括以下功能:在应用程序生命周期后启动和停止总线的托管服务对于ASP.NET Core,文档似乎不完整:
services.AddMassTransitHostedService()