是否有通过中间件或 EAI 系统处理处理大量数据(MBytes?GBytes?)的消息或请求/响应的良好做法,假设中间件传输但不处理巨大的数据块?
使用消息传输数据以保持一致性,但可能会在系统之间多次复制大量数据
将数据保存在存储或数据存储库(文件系统、数据库等)中并传输对数据的引用,但会丢失消息和数据之间的紧密耦合
这个问题的常见解决方案是什么?EAI 或中间件产品如何支持这一点?
是否有通过中间件或 EAI 系统处理处理大量数据(MBytes?GBytes?)的消息或请求/响应的良好做法,假设中间件传输但不处理巨大的数据块?
使用消息传输数据以保持一致性,但可能会在系统之间多次复制大量数据
将数据保存在存储或数据存储库(文件系统、数据库等)中并传输对数据的引用,但会丢失消息和数据之间的紧密耦合
这个问题的常见解决方案是什么?EAI 或中间件产品如何支持这一点?
根据我的经验,最好限制消息的大小。在我知道的环境(Websphere MQ、SonicMQ)中,我发现 5-10 MB 对于大多数消息来说是一个很好的价值。在许多情况下,只有很少的大小达到 100 MB 的消息并没有什么坏处 -> 但是您必须考虑内存消耗,...在大多数消息传递 API,尤其是 JMS 中,您至少会完全拥有消息一次在内存中,这可能会让您在开始并行处理时有些头疼。
我们使用两件事作为解决方法:
通常,只要消息包含结构化数据,我们就会使用第一种解决方案,而在媒体分发的情况下使用第二种解决方案。
对于第一个解决方案,我们也倾向于不使用提供特定的解决方案,而是在我们的自定义实现中实现这个逻辑 - 因此我们不绑定到特定的消息传递系统。
如果在源系统和目标系统之间建立直接连接是可行的,那么只通过消息发送一个引用来开始传输将起作用,但是,正如您所指出的,您失去了松散耦合。
根据企业集成模式一书,您可以实现消息序列模式。
根据我使用 TIBCO 等 EAI 系统的经验。几乎由您来决定我们如何处理任意大量的数据。