gpt4 book ai didi

java - 是否有用于合并来自 2 个队列的项目的企业集成模式?

转载 作者:行者123 更新时间:2023-11-29 09:22:26 24 4
gpt4 key购买 nike

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

  • 第一个生成包含到达队列 queue:file.new 的文件名的 NEWFILE 消息。
  • 第二个生成包含 Filename 和 TaskType 的 TASK 消息,然后转到queue:task

  • 对于给定的文件名,只有一个 NEWFILE 消息。

  • 对于给定的文件名,将有多个 TASK 消息,每个都有不同的 TaskType。
  • 消息可以按任何顺序到达。

我需要转发每条出现queue:perform 的 TASK 消息,但只有匹配文件名的 NEWFILE 消息到达时.

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

我们正在寻找一种消息传递解决方案来取代它,在这种解决方案中我们维护尽可能少的状态并尽可能多地使用企业模式 (Apache Camel)。

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

谢谢,汤姆

最佳答案

看来你应该使用 Aggregator图案。您可以使用组件的各种选项来指示完成条件和消息之间的关联

例如,以下要求表明您可能应该考虑 correlationExpression 上的文件名:

There will only be one NEWFILE message for a given Filename There will be multiple TASK messages for a given Filename

为了处理任务,您可以将任务消息暂时存储到newExchange 对象,然后在适当时您可以将存储的消息刷新到它们的目标队列。我相信您在适当的时刻有两个主要选择:

  1. 等待使用完成条件(例如大小、超时等)聚合给定上下文的所有消息(NEWFILE 和 TASK 消息),例如,您可以使用completionPredicate 选项以评估上下文是否已完成。并在完成后将任务发送到下面的队列。

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

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

关于java - 是否有用于合并来自 2 个队列的项目的企业集成模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com