使用 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["env.foo"]}${in.msge.topic}.*'"/>
这与 略有不同的原因是,在那种情况下,SpEL 表达式的计算结果是一个在上下文初始化期间用作简单 String
的值。
在这种情况下,我们需要评估在运行时用作另一个 SpEL 表达式的一部分的 String
- 因此整个事物需要被 '...'
.[=18= 包围]
想要路由到基于 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["env.foo"]}${in.msge.topic}.*'"/>
这与 String
的值。
在这种情况下,我们需要评估在运行时用作另一个 SpEL 表达式的一部分的 String
- 因此整个事物需要被 '...'
.[=18= 包围]