EasyNetQ发布和使用

时间:2016-12-20 14:49:15

标签: c# rabbitmq rabbitmq-exchange easynetq

我是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}");
    }));
}

2 个答案:

答案 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。