我是EasyNetQ和RabbitMQ的新手。不幸的是,我遇到了消费消息的问题,我不确定它是否因为我发布错误或者我的消费不正确。我可以通过发布看到它确实发送到队列并且消耗它确实从队列中取消它。但是当返回消息时,我得到null:S 我正在使用 IAdvancedBus
发布代码段:
public void send(RegistrationCreatedEvent obj )
{
MessageBus.Publish(Exchange, RoutingKey, true, new Message<RegistrationCreatedEvent>(obj));
}
消费代码片段:
public void Receive()
{
MessageBus.Consume(Queue, (messageBody, properties, info) => Task.Factory.StartNew(() =>
{
var stringMessage = Encoding.Default.GetString(messageBody);
json = JsonConvert.DeserializeObject<RegistrationCreatedEvent>(stringMessage);
Console.WriteLine($"Message Received: {json}");
}));
}
答案 0 :(得分:0)
你能告诉我们哪个变量为空吗?如果messageBody
已为空,则您可能在发布时遇到问题。然后我建议您停止使用者,向队列发送消息,然后使用管理插件https://www.rabbitmq.com/management.html
既然你想要反序列化你的消息,我建议使用内置的messageSerializer,而不是自己动手。看起来像这样:
bus.Consume(queue, x => x.Add<RegistrationCreatedEvent>((message, info) =>
{
//do something with message.body
}));
答案 1 :(得分:0)
解决方案是将我的模型类属性保持为public而不是private。