JBoss ESB의 Drools에서 컨텐트 기반 라우팅을 사용하고 있습니다. 메시지의 내용을 기준으로 대상을 선택하는 몇 가지 규칙이 있습니다. 들어오는 메시지의 내용이 인식되지 않으면이 메시지는 오류 처리 서비스로 라우팅됩니다. 아래는 내 Drools 규칙입니다.Drools를 사용하는 JBoss ESB 컨텐트 기반 라우팅의 기본 대상
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
에 추가되고, 오류 처리 서비스로 연결된다는 점이다. 내 이해에서 규칙은 위에서 아래로 실행됩니다. 위의 규칙 중 하나가 실행되면 마지막 규칙이 실행되지 않아야합니다.
이 문제는 어떻게 해결해야합니까? 일부 Google 검색 결과에 salience
을 사용해야한다고 나와 있는데, 이것이 올바른 해결책입니까?
돌출 부분은 기본/"알 수 없음"규칙에 다른 규칙보다 낮은 우선 순위를 부여하는 가장 간단한 해결 방법입니다. 그것은 돌출 성이 drools이 제공하는 기능이라는 의미에서 "올바른"해결책이 될 것입니다. –