我在 JBoss ESB 中使用基于内容的路由和 Drools。我有几条规则可以根据消息的内容选择要使用的目的地。如果传入消息的内容未被识别,则此消息将被路由到错误处理服务。以下是我的 Drools 规则。
global java.util.List destinations;
rule "A"
when
Message (body.get("data") != null && body.get("data").class == A.class)
then
destinations.add("a");
end
rule "B"
when
Message (body.get("data") != null && body.get("data").class == B.class)
then
destinations.add("b");
end
rule "Unknown"
when
eval(destinations.isEmpty())
then
destinations.add("unknown");
end
问题是每条消息都被路由到错误处理服务,即unknown
总是被添加到destinations
. 据我了解,规则是从上到下执行的,如果执行了上述规则之一,则不应执行最后一条规则。
我应该如何解决这个问题?一些谷歌搜索显示我应该使用salience
,这是正确的解决方案吗?