Architecture EAI/中间件:内联或引用的巨大消息

Architecture EAI/中间件:内联或引用的巨大消息,architecture,messaging,middleware,eai,Architecture,Messaging,Middleware,Eai,通过中间件或EAI系统处理大量数据(MB?GB?)的消息或请求/响应是否有良好的实践,假设中间件传输但不处理巨大的数据块 通过消息传输数据以保持一致性,但可能会在系统之间多次复制大量数据 将数据保存在存储库或数据存储库(文件系统、数据库等)中,并传输对数据的引用,但会失去消息和数据之间的紧密耦合 这个问题的常见解决方案是什么?EAI或中间件产品是如何支持这一点的?如果在源系统和目标系统之间建立直接连接是可行的,那么只通过消息发送引用以启动传输将起作用,但正如您所指出的,您失去了松耦合 根据《

通过中间件或EAI系统处理大量数据(MB?GB?)的消息或请求/响应是否有良好的实践,假设中间件传输但不处理巨大的数据块

  • 通过消息传输数据以保持一致性,但可能会在系统之间多次复制大量数据

  • 将数据保存在存储库或数据存储库(文件系统、数据库等)中,并传输对数据的引用,但会失去消息和数据之间的紧密耦合


这个问题的常见解决方案是什么?EAI或中间件产品是如何支持这一点的?

如果在源系统和目标系统之间建立直接连接是可行的,那么只通过消息发送引用以启动传输将起作用,但正如您所指出的,您失去了松耦合

根据《企业集成模式》一书,您可以实现


根据我在诸如TIBCO等EAI系统方面的经验。如何处理任意数量的数据完全取决于您。

如果在源系统和目标系统之间建立直接连接是可行的,那么仅通过消息发送引用以开始传输将起作用,但正如您所指出的,您将失去松耦合

根据《企业集成模式》一书,您可以实现


根据我在诸如TIBCO等EAI系统方面的经验。如何处理任意数量的数据几乎取决于您自己。

根据我的经验,限制消息的大小是很好的。在我所知道的环境(WebSphereMQ,SonicMQ)中,我发现5-10MB对于大多数消息来说是一个很好的值。在许多情况下,只有很少的邮件大小达到100MB不会有什么坏处->但在这里,您必须考虑内存消耗。。。。在大多数消息传递API(尤其是JMS)中,您至少会有一次将消息完全存储在内存中,这可能会在启动并行处理时给您带来一些麻烦

我们使用两种方法作为解决方案:

  • 在添加一些内容时使用:通常我们发送一个包含所有序列号引用的触发器,以确保完整性
  • 向数据发送“链接”
通常我们在消息包含结构化数据时使用第一种解决方案,在媒体分发的情况下使用第二种解决方案


对于第一个解决方案,我们也倾向于不使用特定的解决方案,而是在我们的自定义实现中实现此逻辑-因此,我们不必绑定到特定的消息传递系统。

根据我的经验,限制消息的大小是很好的。在我所知道的环境(WebSphereMQ,SonicMQ)中,我发现5-10MB对于大多数消息来说是一个很好的值。在许多情况下,只有很少的邮件大小达到100MB不会有什么坏处->但在这里,您必须考虑内存消耗。。。。在大多数消息传递API(尤其是JMS)中,您至少会有一次将消息完全存储在内存中,这可能会在启动并行处理时给您带来一些麻烦

我们使用两种方法作为解决方案:

  • 在添加一些内容时使用:通常我们发送一个包含所有序列号引用的触发器,以确保完整性
  • 向数据发送“链接”
通常我们在消息包含结构化数据时使用第一种解决方案,在媒体分发的情况下使用第二种解决方案

对于第一个解决方案,我们也倾向于不使用特定的解决方案,而是在我们的自定义实现中实现此逻辑-因此,我们不必绑定到特定的消息传递系统