Ben*_*son 5 c# masstransit .net-core asp.net-core
我已经为此奋斗了几个小时,但尽管看似复制了文档,但我似乎无法让它工作。
我正在使用新的 MassTransit AspNetCore 包来注册我的总线和消费者,但它似乎没有启动总线!如果我通过注册接收端点的代码添加断点,它永远不会被击中(但 AddBus 部分会被击中)并且交换/队列不会被创建。
值得注意的是,这只是一个在 IIS 中运行的 Web API,而且也有正常的休息端点(我不知道这是否重要)。
我的代码如下:
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);
});
}));
});
Run Code Online (Sandbox Code Playgroud)
我不禁觉得自己错过了一些非常明显的东西,但我一生都无法弄清楚。
您需要实际启动总线,在您的场景中应该使用托管服务来完成。您可以在此处查看示例:
public class MassTransitConsoleHostedService :
IHostedService
{
readonly IBusControl _bus;
public MassTransitConsoleHostedService(IBusControl bus, ILoggerFactory loggerFactory)
{
_bus = bus;
if (loggerFactory != null && MassTransit.Logging.Logger.Current.GetType() == typeof(TraceLogger))
MassTransit.ExtensionsLoggingIntegration.ExtensionsLogger.Use(loggerFactory);
}
public async Task StartAsync(CancellationToken cancellationToken)
{
await _bus.StartAsync(cancellationToken).ConfigureAwait(false);
}
public Task StopAsync(CancellationToken cancellationToken)
{
return _bus.StopAsync(cancellationToken);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,添加到您的配置中:
services.AddSingleton<IHostedService, MassTransitConsoleHostedService>();
Run Code Online (Sandbox Code Playgroud)
小智 6
实际上,IServiceHost 注册包含在库中,尽管文档中没有提及。需要使用扩展:
services.AddMassTransitHostedService()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6830 次 |
| 最近记录: |