Я создаю Proof of Concept с помощью Rebus по отношению к служебной шине Azure, однако у меня возникла небольшая проблема при синтаксическом анализе сообщения, помещенного в очередь из внешнего источника.
Я получаю сообщение об ошибке:
Получено сообщение с пустым или отсутствующим заголовком rbs2-msg-id!
Я просмотрел GitHub и заметил этот листинг о том, что у кого-то была аналогичная проблема для RabbitMQ, и было рекомендовано использовать декоратор:
https://github.com/rebus-org/Rebus/issues/508
Однако я не уверен, как это сделать только для идентификатора сообщения.
Один из вариантов, который я выбрал, - это изменить код Rebus.AzureTransport, чтобы сделать это:
var messageId = headers.GetValueOrNull(Headers.MessageId);
if (string.IsNullOrEmpty(messageId))
{
messageId = Guid.NewGuid().ToString();
headers[Headers.MessageId] = messageId;
}
Но предпочел бы альтернативу!
Еще я заметил, что BrokeredMessage помещается в ASB следующим образом:
var message = new BrokeredMessage("<xml>This is a test message: " + DateTime.Now+ "</xml>");
Он некорректно сериализуется при получении Ребусом. Я получаю следующую ошибку:
Необработанное исключение 1 при обработке сообщения с идентификатором db13880d-124c-4ed5-993e-96faeca0f140: System.Collections.Generic.KeyNotFoundException: не удалось найти ключ 'rbs2-content-type'
При отмене сериализатора нижеследующее сообщение выглядит как:
@ strin3 http://schemas.microsoft.com/2003/10/Serialization/? 6 Это тестовое сообщение: 06/12/2016 07:44:21
поэтому я не уверен, что делаю не так.
Заранее спасибо.