Я создаю доказательство концепции с использованием Rebus по отношению к Azure Service Bus, однако у меня есть небольшая проблема, анализирующая сообщение, которое помещается очередь из внешнего источника.Rebus Azure ServiceBus - Отсутствует MessageID для сообщения, полученного из внешней службы
Я получаю сообщение об ошибке:
Received message with empty or absent 'rbs2-msg-id' header!
Я смотрел через 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 ставится на БАМ, как это:
var message = new BrokeredMessage("<xml>This is a test message: " + DateTime.Now+ "</xml>");
Это не сериализации правильно, когда принимается по Ребус. Я получаю следующее сообщение об ошибке:
Unhandled exception 1 while handling message with ID db13880d-124c-4ed5-993e-96faeca0f140: System.Collections.Generic.KeyNotFoundException: Could not find the key 'rbs2-content-type'
Переопределяя Serialiser, то underdying сообщение встретив как:
@strin3http://schemas.microsoft.com/2003/10/Serialization/?6This is a test message: 06/12/2016 07:44:21
, так что я не уверен, что я делаю неправильно.
Заранее спасибо.
Привет, Спасибо за ответ. Я буду смотреть на жизнеспособность выполнения цикла приема. Одна вещь, на которую я не был уверен, почему сообщение будет неправильно выбрано из очереди, когда я перепробовал сериализатор (я использовал сериализатор Utf8Fallback в примере ReceiveNonRebusMessageWithRabbitMq). Я бы подумал, что это будет правильно проанализировано? – jazzyuk