Проблема с событиями pub / sub с NServiceBus и Azure Service Bus - PullRequest
0 голосов
/ 14 февраля 2019

Я использую NServiceBus вместе с транспортным уровнем AzureServiceBus в моем приложении .net.Издателем в основном веб-приложении .net и подписчиком является основное консольное приложение .net.Теперь проблема в том, что я публикую событие для веб-приложения, и на портале Azure я вижу увеличение количества сообщений после каждого события публикации в «Заказах» подписчиков по темам «bundle-1», созданным как тема по умолчанию NServiceBus в Azure Service Bus.Но количество активных сообщений в теме равно 0. Но мой подписчик ничего не делает, значит он не слушает.Что я делаю неправильно?Вот конфигурация издателя:

            var endpointConfiguration = new EndpointConfiguration("Products");
            endpointConfiguration.EnableCallbacks();
            var instanceDiscriminator = "8e3af657-tt56-asd3-a75c-2fe8c4bcb635";
            endpointConfiguration.MakeInstanceUniquelyAddressable(instanceDiscriminator);
            var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
            transport.ConnectionString("connectionstring");
            var routing = transport.Routing();
            routing.RouteToEndpoint(
                assembly: typeof(OrderPlacedEvent).Assembly,
                destination: "Orders");
            endpointInstance = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();
            services.AddSingleton<IMessageSession>(endpointInstance); 

и код публикации:

await _messageSession.Publish(new OrderPlacedEvent {OrderId = 1}).ConfigureAwait(false);

и код подписчика:

            Console.Title = "Orders";

            IServiceCollection serviceProvider = new ServiceCollection();
            serviceProvider = Configuration.ConfigureService(serviceProvider);

            var endpointConfiguration = new EndpointConfiguration("Orders");
            endpointConfiguration.SendFailedMessagesTo("error");
            endpointConfiguration.UseSerialization<NewtonsoftSerializer>();
            endpointConfiguration.AuditProcessedMessagesTo("audit");
            endpointConfiguration.EnableInstallers();
            endpointConfiguration.UseContainer<ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(serviceProvider);
            });
            endpointConfiguration.UsePersistence<InMemoryPersistence>();
            var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
            transport.RuleNameShortener(n => n.Length > 50 ? MD5DeterministicNameBuilder.Build(n) : n);
            transport.ConnectionString("connectionString");
            var endpointInstance = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            Console.WriteLine("Press Enter to exit.");
            Console.ReadLine();

            endpointInstance.Stop().GetAwaiter().GetResult();

и событие:

public class OrderPlacedEvent : IEvent {}

Теперь в моем обработчике есть отладчик, но он никогда не срабатывает.Еще одна вещь, у меня также есть некоторые команды, и команды работают нормально.Счетчик сообщений очереди обновляется, когда я отправляю какую-либо команду, а подписчик всегда слушает команды.И еще одна вещь, которую стоит упомянуть: я использую бесплатную пробную версию портала Azure, но думаю, что это не проблема, потому что команды работают нормально.Любая помощь?

...