2015-03-11 2 views
1

Я пытаюсь создать универсальную службу публикации ребусов, которая позволяет любому из наших веб-приложений выводить сообщения о событиях для подписчиков. Единственное задание службы - поддерживать подписку и переиздавать любые полученные ею сообщения. Я хочу избежать необходимости создавать определенные специфические реализации IHandleMessage в службе, потому что ему не нужно ничего знать о входящем сообщении, отличном от его типа.Есть ли способ реализовать Passthrough Publisher в Rebus?

Я пробовал несколько подходов (например, IHandleMessages) и сбоев ребусов, когда он пытается десериализовать сообщение, для которого у него нет сборки.

+0

Это цифры, которые я выяснил бы это частично через две минуты после того, как я разместил это. У вас может быть процедура IHandleMessage , которая в общем случае проходит через сообщение, но службе по-прежнему нужна ссылка на DLL с использованием классов сообщений, которые вы используете. Это решает часть проблемы. – Peter

ответ

1

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

Если вы реализуете ISerializeMessages как, скажем, PassThroughSerializer, вы можете настроить издатель так:

Configure.With(...) .(...) .Serializer(s => s.Use(new PassThroughSerializer()) .(...)

Как вы можете видеть, ваш сериализатору должен быть в состоянии превратить входящий ReceivedTransportMessage (в основном только словарь заголовков и byte[]) в Message, что одни и те же заголовки и object[]

В вашем случае, вы просто на самом деле не делать каких-либо десериализации и просто передать т он byte[] в Message, и, наоборот, передайте его снова, когда пришло время создать TransportMessageToSend.

Надеюсь, это имеет смысл :)

 Смежные вопросы

  • Нет связанных вопросов^_^