Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否存在用于组合来自2个队列的项目的企业集成模式?_Java_Integration_Design Patterns_Enterprise - Fatal编程技术网

Java 是否存在用于组合来自2个队列的项目的企业集成模式?

Java 是否存在用于组合来自2个队列的项目的企业集成模式?,java,integration,design-patterns,enterprise,Java,Integration,Design Patterns,Enterprise,我有两个系统,它们生成我需要使用的不同类型的消息,然后根据它们生成新消息 第一个生成包含到达队列的文件名的NEWFILE消息:file.new。 第二个生成包含文件名和TaskType的任务消息,并转到queue:TASK 对于给定的文件名,只有一条NEWFILE消息 给定文件名将有多个任务消息,每个消息都具有不同的任务类型。 消息可以以任何顺序到达。 我需要将出现的每个任务消息转发到queue:perform,但仅当匹配文件名的NEWFILE消息到达时 目前,我们在另一个非基于队列的系统中进行

我有两个系统,它们生成我需要使用的不同类型的消息,然后根据它们生成新消息

第一个生成包含到达队列的文件名的NEWFILE消息:file.new。 第二个生成包含文件名和TaskType的任务消息,并转到queue:TASK

对于给定的文件名,只有一条NEWFILE消息

给定文件名将有多个任务消息,每个消息都具有不同的任务类型。 消息可以以任何顺序到达。 我需要将出现的每个任务消息转发到queue:perform,但仅当匹配文件名的NEWFILE消息到达时

目前,我们在另一个非基于队列的系统中进行匹配,该系统使用轮询查找文件和任务,并维护两个表,一个用于文件,一个用于任务,当其中一个出现时,我们检查有哪些匹配项,并触发相关任务

我们希望用一个消息传递解决方案来取代它,在这个解决方案中,我们尽可能少地维护状态,并尽可能多地使用企业模式

我不清楚哪些模式/组件可以满足我的要求


谢谢你,汤姆。看来你应该用这个图案。 您可以使用组件的各种选项来指示完成标准和消息之间的相关性

例如,下面的要求表明,您可能应该考虑相关表达式中的文件名:

只有一条NEWFILE消息 对于给定的文件名,将有 给定任务的多个任务消息 文件名

为了处理任务,您可以将任务消息临时存储到 新建Exchange对象,然后在适当时可以将存储的消息刷新到其目标队列。我相信在适当的时候你有两个主要的选择:

等待使用完成条件(如大小、超时等)将给定上下文的所有消息聚合到新文件和任务消息中。为此,您可以使用completionPredicate选项来评估上下文是否已完成。完成后,将任务发送到以下队列

等待直到NEWFILE消息到达,将临时存储的任务消息刷新到目标队列,然后再次等待剩余的任务消息,使用适当的条件指示消息上下文已结束


我没有在代码中尝试过这一点,但我相信,虽然第一个选项可能更容易,但第二个选项可能会提供更好的性能,因为任务消息会尽快转发到其目标队列,因此第一个任务可能会比后一个任务更早完成,而在第一种情况下,您必须等待所有任务生成,然后才开始流程。除此之外,由于您还可以尽快刷新临时存储的消息,因此与第一个选项相比,您的存储需求也会降低。这意味着,如果您处理的是大消息和大容量,您将需要更少的内存,如果不是这样的话。。。那么这两种解决方案可能是相似的。

您似乎应该使用这种模式。 您可以使用组件的各种选项来指示完成标准和消息之间的相关性

例如,下面的要求表明,您可能应该考虑相关表达式中的文件名:

只有一条NEWFILE消息 对于给定的文件名,将有 给定任务的多个任务消息 文件名

为了处理任务,您可以将任务消息临时存储到 新建Exchange对象,然后在适当时可以将存储的消息刷新到其目标队列。我相信在适当的时候你有两个主要的选择:

等待使用完成条件(如大小、超时等)将给定上下文的所有消息聚合到新文件和任务消息中。为此,您可以使用completionPredicate选项来评估上下文是否已完成。完成后,将任务发送到以下队列

等待直到NEWFILE消息到达,将临时存储的任务消息刷新到目标队列,然后再次等待剩余的任务消息,使用适当的条件指示消息上下文已结束

我没有在代码中尝试过这一点,但我相信,虽然第一个选项可能更容易,但第二个选项可能会提供更好的性能,因为任务消息会尽快转发到其目标队列,因此第一个任务可能会比后一个任务更早完成,而在第一种情况下,您必须等待所有任务的生成和完成
只有在这之后,你才能开始这个过程。除此之外,由于您还可以尽快刷新临时存储的消息,因此与第一个选项相比,您的存储需求也会降低。这意味着,如果您处理的是大消息和大容量,您将需要更少的内存,如果不是这样的话。。。那么这两种解决方案可能是相似的。

在看过Apache Camel之后,它看起来确实像您正在寻找的。我知道Apache Camel和Spring集成是企业集成模式的实现。我们已经使用了ApacheCamel。我正在寻找关于如何实现我所描述的场景的具体建议。我应该使用哪些模式/组件以及应该如何配置它?在查看Apache Camel之后,它看起来确实像您正在寻找的。我知道Apache Camel和Spring集成是企业集成模式的实现。我们已经使用了ApacheCamel。我正在寻找关于如何实现我所描述的场景的具体建议。我应该使用哪些模式/组件以及如何配置它?