【发布时间】:2011-02-19 21:26:50
【问题描述】:
NServiceBus 2.0 是否允许为给定的消息类型定义序列化程序?
我希望使用 XmlSerializer 序列化除我的一条消息之外的所有消息。其余的应使用 BinarySerializer 进行序列化。
NServiceBus 2.0 可以吗?
【问题讨论】:
标签: nservicebus esb serialization
NServiceBus 2.0 是否允许为给定的消息类型定义序列化程序?
我希望使用 XmlSerializer 序列化除我的一条消息之外的所有消息。其余的应使用 BinarySerializer 进行序列化。
NServiceBus 2.0 可以吗?
【问题讨论】:
标签: nservicebus esb serialization
我相信序列化程序是基于端点指定的,因此使用该端点的所有消息都将使用相同的序列化程序。
但是,如果您遵循 NServiceBus 对每个端点/队列一种消息类型的死记硬背建议,那么您可以有效地隔离一种消息类型并为其使用不同的序列化程序。
不过,我很好奇,需要二进制序列化的一种消息类型有什么特别之处?
根据评论进行编辑
Distributor info 在与分销商的路由下间接提到了这一点。 Udi Dahan 也经常在NServiceBus Yahoo Group 中提出这个建议,尽管因为那里的搜索很差,所以很难提供链接。
基本上,这个想法是您不希望高优先级的消息被低优先级的消息卡住,而且这为您提供了最大的灵活性,可以在必要时扩展某些消息处理。
因为 MsmqTransportConfig 只允许指定一个 InputQueue,所以每个队列有一种消息类型也意味着每个端点只有一个消息处理程序。
要处理图像,如果您将字节数组编码为 Base64 编码字符串,您仍然可以将其封装在 XML 格式的消息中。这并不理想,但如果您的图像不是太大,这样做可能比只对一种消息类型使用不同的序列化程序更容易。
另一种选择是将图像数据带外存储在数据库或文件系统中,然后通过 ID 或路径(分别)引用它。
【讨论】:
在版本 2 中不可能。但可以使用版本 5 及更高版本中的管道完成http://docs.particular.net/samples/pipeline/multi-serializer/
【讨论】: