События, настроенные в соответствии с соглашением, не приводят к подписке

Мое приложение пытается получить события от конечной точки.
Если я подписываюсь<>() в явном виде, я вижу входящую подписку в конечной точке публикации. Если я пытаюсь получить тот же результат, настраивая соглашение, это терпит неудачу.

Что мне не хватает?

Моя конфигурация выглядит так:

public Subscriber(int maxConcurrency)
{
    var pingEventType = typeof(IMyEvent);
    var pingHandlerType = typeof(MyEventHandler);

    var busConfiguration = new BusConfiguration();
    busConfiguration.EndpointName("MyEndpointName");
    busConfiguration.UseSerialization<JsonSerializer>();
    busConfiguration.EnableInstallers();
    busConfiguration.UsePersistence<NHibernatePersistence>();
    busConfiguration
        .UseTransport<SqlServerTransport>()
        .CallbackReceiverMaxConcurrency(maxConcurrency);
    busConfiguration.AssembliesToScan(AllAssemblies
        .Matching("NServiceBus")
        .And("ServiceControl")
        .And(pingHandlerType.AssemblyQualifiedName)
        .And(pingEventType.AssemblyQualifiedName));
    busConfiguration
        .Conventions()
        .DefiningEventsAs(x => x.Namespace != null && x.Namespace == pingEventType.Namespace);

    var container = new ContainerBuilder().Build();
    busConfiguration.UseContainer<AutofacBuilder>(customizations =>
    {
        customizations.ExistingLifetimeScope(container);
    });
    _startableBus = Bus.Create(busConfiguration);

    // Uncommenting below line results in subscription on the publishing endpoint
    //_startableBus.Subscribe(pingEventType);
}

Самая важная документация и пример кода, кажется, не упоминают ничего другого, что я должен сделать https://docs.particular.net/nservicebus/messaging/conventions?version=core_5

2 ответа

Нашел это. AssemblyQualifiedName - это имя типа с префиксом сборки. Что мне было нужно, так это название самой сборки. Так

busConfiguration.AssembliesToScan(AllAssemblies
    .Matching("NServiceBus")
    .And("ServiceControl")
    .And(pingHandlerType.AssemblyQualifiedName)
    .And(pingEventType.AssemblyQualifiedName));

Должно было

busConfiguration.AssembliesToScan(AllAssemblies
    .Matching("NServiceBus")
    .And("ServiceControl")
    .And(pingHandlerType.Assembly.GetName().Name)
    .And(pingEventType.Assembly.GetName().Name));

Несколько часов меня отталкивало то, что type.Assmembly.FullName - это имя сборки со всей информацией о ее версии и т. Д. Это тоже не работает.

У вас есть обработчик для IMyEvent? Автоматическая подписка работает, только если существует обработчик для данного события в отсканированной сборке.

https://docs.particular.net/nservicebus/messaging/publish-subscribe/controlling-what-is-subscribed?version=core_5

Другие вопросы по тегам