2010-05-04 39 views
4

我已经阅读了有关真正的消息传递的消息,而不是在总线上发送有效负载,它会发送一个标识符。在我们的例子中,我们有很多旧版应用程序/服务,并且这些应用程序/服务旨在接收消息(xml)的有效负载,接近4MB(关闭MSMQ限制)。有没有一种方法让nService总线自动处理大量的有效负载和持久化消息或其他解决方法,以便发布者/订户服务不必担心有效负载大小,也不必担心如何解除/重新合并有效载荷? 预先感谢您。带有大型XML消息的nServiceBus

回答

0

我不知道任何内部NServiceBus功能将额外数据与带外消息关联。

我认为你是正确的 - 如果整个有效载荷不能在限制范围内,那么最好将它保存在你自己的其他地方,然后传递一个ID。

但是,您可能会设计一个消息结构,使得消息可以实现一个IHasPayload接口(可能会包含一个ID和一个Type?),然后您的应用程序逻辑可以有一个通用方法得到一个IHasPayload消息。

+1

谢谢大卫, 想到类似的东西,但你需要另一个子系统,作为一个存储库(如数据库)和您的消息依赖于该子系统启动和运行。这增加了整体解决方案和消息可靠性以及与此相关的所有复杂性。我希望能找到不同的东西(不是奇迹,而是我可能不知道的nBusService功能)。 – 2010-05-05 12:04:08

1

您可以使用Message Sequence模式。在NServiceBus中,你将在发送者中分割有效负载,将这些块包装在一个自定义的'序列'IMessage中,然后在另一端实现一个传奇以提取重组块&。您需要花费一些时间来处理错误处理&超时。

+0

谢谢萨姆。这是一个选项。我读得越多,我看到的消息越多,我应该真正将有效载荷留出,并在需要时进行查询。 – 2010-05-20 13:40:19

+0

嗨肖恩 - 这取决于你的要求是一种权衡。如果您无法接触潜在客户,您的声明检查有效负载存储可能已关闭,则您需要使用消息序列。 – Sam 2010-05-21 01:24:43

+0

为什么不将有效载荷作为文件写入FTP站点,然后使用上传文件的ID创建消息? – Marco 2013-10-29 15:34:04

1

您可以随时使用压缩消息的快速“修复”。

使用二进制序列化器序列化的POCO可以被大幅压缩。我们看到我们的消息是20mb压缩到3.1mb。

因此,如果您的邮件在4mb左右徘徊,那么只需编写一个IMessageSerializer可以很简单,该IMessageSerializer会自动压缩邮件。