NServiceBus和Azure Service Bus的发布/订阅事件的问题

时间:2019-02-14 14:44:21

标签: c# asp.net-core nservicebus azureservicebus azure-servicebus-topics

我在.net应用程序中将NServiceBus与AzureServiceBus传输层一起使用。 .net核心Web应用程序中的发布者,而订阅者是.net核心控制台应用程序。现在的问题是我正在为Web应用程序发布事件,并且在Azure门户中,在Azure Service Bus中由NServiceBus创建为默认主题的“ bundle-1”主题下的订户“订单”中的每个发布事件之后,我都能看到消息计数增加。但是主题的“活动消息计数”为0。但是我的订阅者不执行任何操作均表示未监听。我究竟做错了什么? 这是发布者配置:

~stepCond = Condition();

Routine({
    "starting".postln;
    ~stepCond.wait;
    "continuing".postln;
}).play;

OSCfunc(\step, {
    ~stepCond.unhang();
}, '/step')

和发布代码:

            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();

现在,我在处理程序中附加了一个调试器,但是它从未被击中。还有一件事,我也有一些命令,这些命令运行正常。每当我发送任何命令并且订阅者始终收听命令时,Queue的消息计数器都会更新。 最后要提到的一点是,我正在使用Azure门户的免费试用版,但是我认为这不会成为问题,因为命令可以正常工作。有帮助吗?

0 个答案:

没有答案