Я получил продюсер (сторонний), публикующий сообщения в 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? Я не могу заставить издателя настроить схему сообщения.