有点相关:NServiceBus 端点是否可以使用不同的序列化程序来处理和发布?
我们已经在我们的基础设施中广泛部署了 NServiceBus,并且它都是使用XmlSerializer
. 但是,出现了一种一次性的情况,XmlSerializer
即 不能满足我们的要求,所以我正在考虑JsonSerializer
or BinarySerializer
。
将整个基础架构中的每个端点更改为使用不同的序列化程序将在部署方面极具破坏性和浪费时间,但我无法弄清楚如何引入一个使用不同序列化程序的新端点......或者更确切地说,很容易将端点本身配置为使用备用序列化程序,但我不确定如何让任何其他端点与之交谈。
如果我使用 NServiceBus 3.x,我是否会坚持在整个架构中使用的一种序列化程序类型?我似乎记得读过一次,我认为在 NServiceBus 留言板上,可以在端点级别定义序列化,但是没有给出太多细节,写这个答案的人可能忽略了上面明显的互操作问题。
我希望架构看起来像这样:
+---------+ +------------+ (pub/sub) +------------+
| Web App |----->| Endpoint A |<--------->| Endpoint B |<-------> ...
+---------+ +------------+ +------------+
| (XML) (XML)
|
| +------------+
+---------->| Endpoint C |
+------------+
(JSON)
当然,问题是,尽管我显然可以将端点 C 配置为JsonSerializer
独占使用(并且对此没问题),但“Web 应用程序”仍然需要拥有自己的(仅发送)总线才能与端点 A 或端点 C。必须使用一个串行器配置该总线。由于它已经将消息发送到许多XmlSerializer
基于 - 的端点,因此我不能将其切换为JsonSerializer
. 而且我无法在配置或文档中找到指示 NServiceBus 以不同方式序列化某些消息的方法,无论是在消息级别还是在端点级别。我什至不确定 NSB 4/5 中的更改是否会在技术上支持这一点,因为它们都围绕着如何接收消息而不是发送消息。
是否有我缺少的配置方法或设置可以让我这样做?如果没有,还有哪些其他明智的选择?也许在 Web 应用程序中托管两个端点?或者也许是委托给其他序列化程序的自定义序列化程序?