Установление очередей в SimpleInjector для MassTransit на стороне издателя - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть 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 сообщение, но все еще не создает никакой очереди или обмена за сценой.

1 Ответ

3 голосов
/ 13 февраля 2020

Так работает MT / RMQ. Очевидно, что MT не может определить, какие события вы можете или не можете опубликовать sh, основываясь на потоке ваших приложений. Прежде чем запускать службы, которые начнут публикацию, вы должны убедиться, что ваш потребительский сервис запущен сначала или, по крайней мере, правильно настроена топология шины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...