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

时间:2009-08-17 20:46:17

标签: architecture messaging middleware eai

是否有良好的做法来处理通过中间件或EAI系统处理大量数据(MBytes?GBytes?)的消息或请求/响应,并确保中间件传输但不处理大量数据blob?

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

  • 将数据保存在商店或数据存储库(文件系统,数据库......)中并传输对数据的引用,但不会消除消息与数据之间的紧密耦合

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

2 个答案:

答案 0 :(得分:0)

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

根据企业集成模式一书,您可以实现Message sequence pattern

根据我对TIBCO等EAI系统的经验。这要由你来决定如何处理任意大量的数据。

答案 1 :(得分:0)

根据我的经验,限制消息的大小是很好的。在我所知的环境(Websphere MQ,SonicMQ)中,我发现5-10 MB对于大多数消息来说都是一个很好的价值。在许多情况下,只有极少数大小高达100 MB的消息也不会有什么坏处 - >但是你必须考虑内存消耗,....在大多数消息传递API中,特别是JMS,你至少会在内存中完全消息,这可能会让你在开始并行处理时感到头疼。

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

  • 使用Message sequence pattern添加一些内容:我们主要发送一个触发器,其中包含所有序列号的引用以确保完整性
  • 向数据发送“链接”

通常我们会在消息包含结构化数据时使用第一个解决方案,第二个解决方案用于媒体分发。

对于第一个解决方案,我们也倾向于不使用提供特定解决方案,但在我们的自定义实现中实现此逻辑 - 因此我们不受特定消息传递系统的约束。