与Is it possible for an NServiceBus endpoint to Handle and Publish using different serializers?
有些相关我们已经在基础架构中广泛部署了NServiceBus,并且全部使用XmlSerializer
进行配置。但是,出现了XmlSerializer
无法满足我们要求的一次性情况,因此我正在考虑JsonSerializer
或BinarySerializer
。
更改整个基础架构中的每个端点以使用不同的串行器会在部署方面造成高度破坏性和浪费时间,但我无法确定如何引入一个使用不同串行器的新端点。或者更确切地说,很容易配置端点本身以使用备用串行器,但我不确定如何让任何其他端点与它通信。 / p>
如果我使用NServiceBus 3.x,我是否坚持使用整个架构中使用的一种序列化器类型?我似乎记得曾经读过一次,我认为在NServiceBus留言板上,可以在端点级别定义序列化,但是没有给出很多细节,并且编写该答案的人可能忽略了上面明显的互操作问题。
我希望架构看起来像这样:
+---------+ +------------+ (pub/sub) +------------+
| Web App |----->| Endpoint A |<--------->| Endpoint B |<-------> ...
+---------+ +------------+ +------------+
| (XML) (XML)
|
| +------------+
+---------->| Endpoint C |
+------------+
(JSON)
问题是,当然,虽然我可以明显配置端点C以独占使用JsonSerializer
(并且可以使用此功能),但“Web App”仍然需要拥有自己的(仅限发送) )总线以便与端点A或端点C通信。并且必须使用一个串行器配置该总线。由于它已经向多个基于XmlSerializer
的端点发送消息,因此我无法将其切换为JsonSerializer
。并且我无法在配置或文档中找到指示NServiceBus以不同方式序列化某些消息,无论是在消息级别还是在端点级别。我甚至不确定NSB 4/5中的更改是否在技术上支持这一点,因为它们都是收到消息,而不是发送。
是否有一个配置方法或设置我错过了哪些允许我这样做?如果没有,还有其他明智的选择吗?也许在Web App中托管两个端点?或者可能是一个委托给其他序列化程序的自定义序列化程序?
答案 0 :(得分:1)
您可以在NSB管道中使用传输级别message mutator。情况可能是变异在处理过程中发生得太晚,但值得一看。否则,您需要实现自己提到的自定义序列化程序来处理所有不同的格式。
另一个想法是在所有端点打开网关。这会让你在所有端点上使用HTTP,我希望能解决它。再说一遍,我还没有证实这一点,只是提出一些想法。
答案 1 :(得分:0)
从NServiceBus的第5版开始,我们已经为这种情况添加了一些基本支持,但最近在版本6中它现在更加完整。
您可以在此处找到有关它的更多信息: