У меня есть 2 приложения, одно публикует событие и одно потребительское событие. При публикации используется SimpleInjector:
container.AddMassTransit(x =>
{
x.AddBus(() => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(ConfigurationValuesProvider.Current.Get("RabbitHostName"), hostConfigurator =>
{
});
}));
});
Потребитель использует CastleWindsor:
container.AddMassTransit(x =>
{
x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(configurationProvider.RabbitHostName);
x.AddConsumer<FactAddedHandler>();
x.AddConsumer<FactAddedWebhookHandler>();
x.AddConsumer<FactMonitorHandler>();
cfg.ConfigureEndpoints(container);
}));
});
Когда я запускаю приложение потребитель , происходит то, что оно создает все очереди и обмены для связанных подписчиков. Однако такого не происходит, когда я запускаю только приложение публикации. Это означает, что если очередей не существует и приложение publisher запускается и публикует события до запуска приложения customer , эти события теряются. Следуя документации https://masstransit-project.com/usage/containers/simpleinjector.html, я вижу, что у masstransit есть свой собственный способ определения потребителей с помощью простого инжектора, но не способ определения издателей. Я мог бы найти это:
cfg.Publish<ScreeningAddedIntegrationEvent>(@event =>
{
@event.Durable = false; // default: true
});
, который помогает мне определить способ, которым я хочу опубликовать sh конкретное c сообщение, но все еще не создает никакой очереди или обмена за сценой.