首页 > 解决方案 > MassTransit 消费者不会触发

问题描述

启动.cs

 static void Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingAzureServiceBus(h =>
            {
                var host = h.Host(serverAddressURI
                    ,
                    z =>
                    {
                        z.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", key);
                    });

                h.ReceiveEndpoint(host, "orderqueue",
                    ep =>
                    {
                         ep.Consumer<OrderConsumer>(); 
                    });
            });

            bus.Start();
            TaskUtil.Await(() => bus.Publish(new Order {Text = "Hi3"}));        
            bus.Stop();
        }

订单消费者

public class OrderConsumer : IConsumer    
    {
        public async Task Consume(ConsumeContext<Order> context)
        {
            await Console.Out.WriteLineAsync($"Shipping order: {context.Message.Text}");

        }
    }

我正在尝试使用 masstransit 设置一个简单的测试,但不确定是什么问题,消息已发送到我的队列,我可以在 Azure 门户的 Azure 服务总线仪表板上看到它。但是消费者永远不会被触发,而且我没有任何错误..有什么想法吗?

标签: .netazureservicebusmasstransit

解决方案


这可能是因为您的应用程序在消费者有机会完成消费之前就停止了。尝试TaskUtil.Await(() => Task.Delay(2000))在发布后立即添加一个,以便在应用程序退出之前让您的消费者有时间使用。

当然,这在实际应用中应该不是问题。

题外话,您可以使用异步 Main 方法来避免TaskUtil.Await(): public static async Task Main(string[] args)


推荐阅读