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

时间:2015-10-19 15:53:53

标签: regex spring spring-integration spring-el

希望基于SpEL正则表达式组合路由到通道(以便来自不同主题/有效负载的多条消息可以路由到同一通道)。 尝试如上所述以及使用不同路由器类型的其他组合。不工作。

function make() {
    return new Promise(function(resolve, reject) {
        gulp.src(getPatterns('src-app'))
        .pipe(gulp.dest('./build/app/'))
        .on("end", resolve)
        .on("error", reject);
    });
}

return (args.noclean && !args.deploy)
    ? make()
    : del(getPatterns('dest-app')).then(make);

低于错误:

引起:org.springframework.expression.spel.SpelParseException:EL1049E:(pos 37):'。':' star(*)'之后的意外数据

标题['主题'] = mesge.getPayload()。setHeaders("主题"," testTopic");

任何人都可以提供一些建议。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

请注意,它不适用于点缀systemProperties。你需要为它添加引号......

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

这与this answer略有不同的原因是,在这种情况下,SpEL表达式求值为在上下文初始化期间用作简单String的值。

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