2

有点相关:NServiceBus 端点是否可以使用不同的序列化程序来处理和发布?

我们已经在我们的基础设施中广泛部署了 NServiceBus,并且它都是使用XmlSerializer. 但是,出现了一种一次性的情况,XmlSerializer即 不能满足我们的要求,所以我正在考虑JsonSerializeror 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 应用程序中托管两个端点?或者也许是委托给其他序列化程序的自定义序列化程序?

4

2 回答 2

1

您可以在 NSB 管道中使用传输级别的消息修改器。可能是突变在处理过程中发生得太晚了,但值得一看。否则,您将需要实现您提到的自定义序列化程序来处理所有不同的格式。

另一个想法是在所有端点中打开网关。这将使您在所有端点上都使用 HTTP,我希望这能解决它。同样,我还没有证实这一点,只是提出了一些想法。

于 2013-04-09T20:54:29.120 回答
0

从 NServiceBus 的第 5 版开始,我们已经为这个场景添加了一些基本支持,但最近在第 6 版中,它现在更加完整。

您可以在此处找到有关它的更多信息:

https://particular.net/blog/build-a-babel-fish-nservicebus

于 2017-08-09T12:52:16.933 回答