为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻阅古今 2021-07-17 13:01:06
我可以使用以下代码成功发布消息:        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 不能为空
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-07-18
?
HUWWW

TA贡献1874条经验 获得超12个赞

在我的情况下,问题与使用旧版本 ENQ 的发布者服务有关,而后者又使用LegacyTypeNameSerializer。在使用较新版本 ENQ 的消费服务端,我所要做的就是在创建总线时添加以下内容:

serviceRegister.EnableLegacyTypeNaming();

这是一种扩展方法,应该包含在较新版本的 ENQ 中。


查看完整回答
反对 回复 2021-07-18
  • 3 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信