EasynetQ bus.Subscribe 未触发 - 抛出“messageType 不能为空”

我可以使用以下代码成功发布消息:


        using (IAdvancedBus bus = RabbitHutch.CreateBus("host=192.168.153.128:5672;username=user;password=pass").Advanced)

        {

            IExchange exchange = bus.ExchangeDeclare("milk.api", ExchangeType.Topic);

            IQueue queue = bus.QueueDeclare("milkorderqueue");

            IBinding binding = bus.Bind(exchange, queue, "#");

            bus.Publish<MilkOrderRequest>(exchange, "#", true, new Message<MilkOrderRequest>(milkOrder));

        }

        return new HttpResponseMessage(System.Net.HttpStatusCode.OK);

当我的订阅者尝试接收消息时,EasyNetQ_Default_Error_Queue 队列会增加。这是侦听器的代码:


        IBus bus = RabbitHutch.CreateBus(@"host=192.168.153.128:5672;username=user;password=pass");

        bus.Subscribe<MilkOrderRequest>("my_subscription_id", message =>

        {

            Console.WriteLine($"Order recieved: {message.Milk}.");

        }, config =>

        {

            config.WithQueueName("milkorderqueue");

        });

我也尝试了以下方法但没有成功:


        IAdvancedBus bus = RabbitHutch.CreateBus(@"host=192.168.153.128:5672;username=user;password=pass").Advanced;

        IExchange exchange = bus.ExchangeDeclare("milkshop.subscriber", ExchangeType.Topic);

        IQueue queue = bus.QueueDeclare("milkorderqueue");

        bus.Bind(exchange, queue, "#");

        bus.Consume<MilkOrderRequest>(queue, (message, info) =>

        {

            Console.WriteLine($"Order recieved: {message.Body.Milk}.");

        });

我无法在 Google 上找到有关异常的答案:


messageType 不能为空


翻阅古今
浏览 254回答 3
3回答

慕姐8265434

发现错误。我的 API 项目和控制台应用程序使用不同版本的 EasynetQ nuget 包。一个是 2.33,另一个是 3.0.0。

HUWWW

在我的情况下,问题与使用旧版本 ENQ 的发布者服务有关,而后者又使用LegacyTypeNameSerializer。在使用较新版本 ENQ 的消费服务端,我所要做的就是在创建总线时添加以下内容:serviceRegister.EnableLegacyTypeNaming();这是一种扩展方法,应该包含在较新版本的 ENQ 中。
打开App,查看更多内容
随时随地看视频慕课网APP