我已经阅读了有关真正的消息传递的信息,而不是在总线上发送有效负载,它会发送一个标识符。在我们的例子中,我们有许多遗留应用程序/服务,这些应用程序/服务旨在接收接近4MB(关闭MSMQ限制)的消息(xml)的有效负载。有没有办法让nService总线自动处理大型有效负载和持久消息或另一种解决方法,这样发布者/订阅者服务就不必担心有效负载大小,也不必担心如何解除/重新保持水有效载荷? 提前谢谢。
答案 0 :(得分:1)
您可以使用Message Sequence模式。在NServiceBus中,您将在发送方中拆分有效负载,将块包装在自定义的“序列”IMessage中,然后在另一端实现一个saga以提取块和&重新组装。您需要在错误处理方面付出一些努力。超时。
答案 1 :(得分:1)
您始终可以使用压缩消息的快速“修复”。
使用二进制序列化器序列化的POCO可以大幅压缩。我们看到我们的消息是20mb压缩到3.1mb。
因此,如果你的消息在4mb左右徘徊,那么编写一个IMessageSerializer可能很简单,它会在消息传输时自动压缩消息。
答案 2 :(得分:0)
我不知道任何内部NServiceBus功能可以将额外数据与带外消息相关联。
我认为你的标记是正确的 - 如果整个有效载荷不能达到限制范围,那么最好将它自己保存在别处,然后传递一个ID。
但是,您可以设计一个消息结构,使消息可以实现IHasPayload接口(可能包含ID和Type?),然后您的应用程序逻辑可以有一个通用的方法来获取给出IHasPayload消息的有效负载。