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

person hello world    schedule 20.12.2016    source источник


Ответы (2)


Не могли бы вы сказать нам, какая переменная равна нулю? Если messageBody уже равно нулю, у вас могут возникнуть проблемы с публикацией. Тогда я бы порекомендовал вам остановить своего потребителя, отправить сообщение в очередь и просмотреть сообщения с помощью подключаемого модуля управления https://www.rabbitmq.com/management.html

И поскольку вы все равно хотите, чтобы ваше сообщение было десериализовано, я бы рекомендовал использовать встроенный messageSerializer вместо того, чтобы делать это самостоятельно. Будет выглядеть примерно так:

bus.Consume(queue, x => x.Add<RegistrationCreatedEvent>((message, info) => 
{
  //do something with message.body
}));
person virth    schedule 22.12.2016

Решение заключалось в том, чтобы сохранить свойство класса модели общедоступным, а не частным.

person hello world    schedule 22.12.2016