MassTransit: использование сообщений, созданных третьими лицами (без обязательного конверта) - PullRequest
0 голосов
/ 01 ноября 2018

Я получил продюсер (сторонний), публикующий сообщения в ActiveMQ, которые в основном являются сериализованными объектами POCO. В настоящее время я использую инфраструктуру, предоставляемую https://www.nuget.org/packages/Apache.NMS.ActiveMQ/, с простой сантехникой для поддержки строго типизированных сообщений, выглядящих почти как

public async void OnMessage(IMessage message)
{
     var msgBody = ((ITextMessage)message).Text;
     var deserialized = JsonConvert.DeserializeObject<T>(msgBody);
     await Handler.Handle(deserialized);
     message.Acknowledge();
}

Производитель и потребитель не делят двоичные файлы с контрактами, тип T - мои собственные классы моделей, имитирующие POCO, используемый производителем. Это очень упрощенно, но работает для базовых сценариев.

Я пытался переключиться на MassTransit, но, независимо от того, какую конфигурацию потребителя я использую, кажется, что он не может справиться с десериализацией таких сообщений. Сбой за исключением

Error converting value "ID:{cluster_name}-0f5e525f2f14ad485-38017-1539583126655-8:18:1:1:2" to type 'System.Nullable`1[System.Guid]'. Path ''.

{имя-кластера}, являющееся именем кластера ActiveMQ.

Я прочитал на http://masstransit -project.com / MassTransit / advanced / interoperability.html , что MassTransit требует, чтобы сообщения включали набор свойств метаданных. Сообщения, которые я пытаюсь использовать, не имеют таких свойств, так как они приходят от третьей стороны, не имея понятия, что я пытаюсь использовать MassTransit.

Вопрос: возможно ли обрабатывать такие сообщения с помощью MassTransit? Я не могу заставить издателя настроить схему сообщения.

1 Ответ

0 голосов
/ 01 ноября 2018

Наилучшим решением является получение сообщений от сторонних разработчиков с помощью клиента ActiveMQ, преобразование их в сообщения, над которыми вы будете работать в среде, использующей MassTransit, и повторная публикация этих преобразованных сообщений. Это будет ваш шлюз, легкий сервис без сохранения состояния. Все остальные потребители сообщений, находящиеся в конвейере, смогут использовать MassTransit.

...