使用 SpEL 和正则表达式的 Kafka 通道路由

Kafka channel routing using SpEL and regex

想要路由到基于 SpEL 正则表达式组合的频道(以便来自不同 topic/payload 的多条消息可以路由到同一频道)。 尝试如上所述和其他组合使用不同的路由器类型 available.Not 工作。

<int:recipient-list-router  input-channel="receiveMessageChannel">
 <int:recipient channel="in_channel" selector-expression="headers['topic']  matches  #{systemProperties['env'] + '${in.msge.topic}' + '.*'}"/>
 <int:recipient channel="email_channel" selector-expression="headers['topic']  matches #{systemProperties['env'] + '${email.msge.topic}' + '.*'}"/>
 </int:recipient-list-router>

出现以下错误:

原因:org.springframework.expression.spel.SpelParseException:EL1049E:(pos 37):“.”后的意外数据:'star(*)'

headers['topic'] = mesge.getPayload().setHeaders("topic","testTopic");

谁能提供一些suggestion.Thanks。

匹配参数必须是 String。这是正确的语法...

selector-expression="headers['topic']  matches '#{systemProperties[env]}${in.msge.topic}.*'"

请注意,它不适用于带点的 systemProperties。您需要为此添加引号...

selector-expression="headers['topic']  matches '#{systemProperties[&quot;env.foo&quot;]}${in.msge.topic}.*'"/>

这与 略有不同的原因是,在那种情况下,SpEL 表达式的计算结果是一个在上下文初始化期间用作简单 String 的值。

在这种情况下,我们需要评估在运行时用作另一个 SpEL 表达式的一部分的 String - 因此整个事物需要被 '...'.[=18= 包围]