代码之家  ›  专栏  ›  技术社区  ›  Sean Feldman

带有大型XML消息的NServiceBus

  •  4
  • Sean Feldman  · 技术社区  · 14 年前

    我已经了解了真正的消息传递,它发送的不是总线上的有效负载,而是一个标识符。在我们的例子中,我们有很多遗留应用程序/服务,这些应用程序/服务的设计目的是接收接近4MB(接近MSMQ限制)的消息负载(XML)。nservice总线是否有办法处理大负载并自动持久化消息,或者另一种解决方法,以便发布者/订阅者服务不必担心负载大小,也不必担心如何消除/重新水合负载? 提前谢谢你。

    3 回复  |  直到 14 年前
        1
  •  0
  •   David Boike    14 年前

    我不知道有任何内部nservicebus功能可以将额外数据与带外消息关联起来。

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

    但是,您可以设计一个消息结构,使消息可以实现ihaspayload接口(它可能包含id和类型?),然后您的应用程序逻辑可以有一个通用的方法来获取给定ihaspayload消息的有效负载。

        2
  •  1
  •   Sam    14 年前

    你可以用 Message Sequence 模式。在nservicebus中,您将在发送方中拆分负载,将块包装成自定义的“序列”imessage,然后在另一端实现saga以提取块并重新组装。您需要在错误处理和超时方面付出一些努力。

        3
  •  1
  •   Gord    14 年前

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

    使用二进制序列化程序序列化的poco可以大幅度压缩。我们看到我们的信息被压缩到了3.1MB。

    因此,如果您的消息徘徊在4MB左右,那么编写一个imessageserializer可能很简单,它可以在消息处于连线状态时自动压缩消息。