У меня есть основное решение ASP.NET, которое содержит 2 службы (каждая из которых использует MassTransit) и общий проект, который имеет часть конфигурации для обеих служб. < /p>
Общий проект содержит следующее: < /p>
У меня есть основное решение ASP.NET, которое содержит 2 службы (каждая из которых использует MassTransit) и общий проект, который имеет часть конфигурации для обеих служб. < /p> Общий проект содержит следующее: < /p> [code]public static IServiceCollection AddMassTransitWithRabbitMq( this IServiceCollection services, BrokerSettings appSettings, Action configureEndpoints, Action? configureJobConsumers = null) { services.AddMassTransit(cfg => { var entryAssembly = Assembly.GetEntryAssembly(); cfg.AddConsumers(entryAssembly);
rabbitCfg.Host(appSettings.HostName, "/", h => { h.Username(appSettings.UserName); h.Password(appSettings.Password); h.Heartbeat(600); });
rabbitCfg.ConfigureEndpoints(context); }); }); return services; } < /code> В моей службе я называю метод таким: < /p> services.AddMassTransitWithRabbitMq(appSettings.BrokerSettings, (msContext, cfg) => { cfg.ReceiveEndpoint(QueueNames.GetPropertiesExternal, e => { e.ConfigureConsumer (msContext); e.ConnectReceiveEndpointObserver(new GlobalExceptionObserver()); }); }, reg => { reg.AddConsumer(c => { c.Options(o => o .SetJobTimeout(TimeSpan.FromHours(5)) .SetConcurrentJobLimit(5)) // one long job at a time per instance .SetRetry(r => r.Interval(3, TimeSpan.FromMinutes(1))); }); }); < /code> Мой потребительский класс: < /p> public class PropertiesAndDefinitionsConsumer(ILogger logger) : IJobConsumer { public async Task Run(JobContext context) { // Do something. } } < /code> При вызове я получаю сообщение в своей очереди, но потребитель никогда не попадает. < /p> return await _publishProvider.SubmitJob(message, cancellationToken); [/code] Это запись в моем менеджере Rabbitmq: