Java / Spring中基于内容的路由

时间:2020-06-25 03:24:40

标签: apache-camel spring-integration eip

我们有一个场景,其中应该根据消息内容和不同条件进行消息路由。我们将条件存储在数据库中,这些条件将在运行时由其他应用配置,我们计划将此路由条件保存在路由应用可以访问的缓存中。

根据消息和条件找出所有路由应用程序作业的下一步(队列),并将消息放入正确的队列中,以便相关应用程序选择消息并进行处理。

是否有一种简单的方法可以在不使用apache骆驼等的情况下实现此方案。条件是简单相等,不相等等,因此检查XML消息。

2 个答案:

答案 0 :(得分:0)

您可以使用Camel的Recipient List EIP进行这类动态路由。如果简单的条件(例如标头值等)还不够,则可以use a Java Bean method as Recipient List

在这种方法中,您可以访问消息的所有部分,然后执行所需的任何操作。如果您发现必须将消息发送到的位置,只需返回Camel端点URI。例如activemq:queue:myQueue

如果需要,收件人列表还可以将(相同)消息发送到多个端点。

答案 1 :(得分:0)

Spring Integration提供了一个Router EIP实现,您可以在其中通过POJO方法调用指定自定义逻辑,并决定向哪个输出通道发送消息:https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#messaging-routing-chapter

这就是MessageChannel是框架中第一类公民的原因:您的业务逻辑与路由逻辑没有联系,并且您可以在每个通道子流上进行任何复杂的流,而不会影响到其中的任何其他内容该应用程序。