与:NServiceBus端点是否可以使用不同的序列化程序来处理和发布?有关
我们已经在基础设施中部署了广泛的NServiceBus,并且都是使用XmlSerializer
进行配置的。然而,出现了一个一次性的情况,即XmlSerializer
不能满足我们的需求,所以我考虑JsonSerializer
或BinarySerializer
。
将整个基础结构中的每个端点更改为使用不同的序列化程序将极大地干扰和浪费部署时间,但我很难找到如何引入一个使用不同序列化程序的新端点.或者说,很容易将端点本身配置为使用备用序列化程序,但我不知道如何才能让其他端点与其对话。
如果我使用的是NServiceBus 3.x,那么在整个体系结构中使用的序列化程序类型是否会被困住呢?我似乎记得有一次在NServiceBus留言板上读到,序列化可以在端点级别定义,但是没有给出多少细节,写这个答案的人可能忽略了上面明显的互操作问题。
我希望这个建筑看起来像这样:
+---------+ +------------+ (pub/sub) +------------+
| Web App |----->| Endpoint A |<--------->| Endpoint B |<-------> ...
+---------+ +------------+ +------------+
| (XML) (XML)
|
| +------------+
+---------->| Endpoint C |
+------------+
(JSON)
当然,问题是,虽然我显然可以将端点C配置为只使用JsonSerializer
(并同意这样做),但"Web“仍然需要有自己的(仅发送)总线,才能与端点A或端点C进行通信,并且必须使用一个序列化程序来配置该总线。由于它已经向多个XmlSerializer
-based端点发送了消息,所以我不能仅仅将其切换到JsonSerializer
。我无法在配置或文档中找到指示NServiceBus以不同方式序列化某些消息的方法,无论是在消息级别还是在端点级别。我甚至不确定NSB 4/5中的更改在技术上是否支持这一点,因为它们都围绕着消息的接收方式,而不是发送方式。
是否有一种配置方法或设置允许我这样做?如果没有,还有哪些其他明智的选择?也许在Web应用程序中托管两个端点?或者是委托给其他序列化程序的自定义序列化程序?
发布于 2013-04-09 20:54:29
您可以在NSB管道中使用传输级别讯息突变体。这种突变在处理过程中可能发生得太晚,但值得一看。否则,您将需要实现自定义序列化程序,就像您提到的那样,以处理所有不同的格式。
另一个想法是打开所有端点的网关。这将使您深入到所有端点上的HTTP,我希望这将解决这个问题。再一次,我没有证实这一点,只是提出了一些想法。
发布于 2017-08-09 12:52:16
从NServiceBus的第5版开始,我们已经为这个场景添加了一些基本支持,但是最近版本6已经完成了很多。
您可以在这里找到更多有关它的信息:
https://stackoverflow.com/questions/15892679
复制相似问题