2012-02-16 5 views
3

정적 엔진 규칙에 따라 런타임시 책임 체인이 변경되는 규칙 엔진을 설계해야한다고 가정합니다. 이 문제를 구현하기위한 최상의 설계 패턴은 무엇입니까?규칙 엔진을 만드는 데 가장 좋은 디자인 패턴

예를 들면, 일부 구성에 따라 스트림의 이벤트 집합은 (1) 필터링, (2) 부분 집합 (3)으로 분할 됨

각 스트림에 대해 고객은 3 가지 또는 모두를 선택할 수 있습니다. 3 명중

그래서 각 어셈블리 파이프 라인은 각 스트림의 config를 기반으로 런타임에 구성되어야합니다.

이것을 달성하는 가장 좋은 디자인 패턴은 무엇입니까?

+2

디자인 패턴으로 모든 것이 해결된다고 생각하는 함정에 빠진 것처럼 보입니다. 어떤 디자인이 떠오르는지 말해주십시오. –

+0

큐를 통해 모든 스트림을 전달하는 규칙 엔진 개체가 있다고 생각했습니다. 체인의 첫 번째 부분은 필터링, 두 번째는 수정, 세 번째 부분은 파티셔닝입니다. – Vignesh

+0

특정 작업이 스트림에 대해 구성되지 않은 경우 스트림을 파이프 라인의 다음 스트림으로 전달하기 만합니다. 즉, 정적으로 모든 3 가지 작업에 대한 규칙 엔진을 정적으로 구성한다는 의미입니다. 스트림에 대한 조립 라인을 구성하고 해당 특정 스트림에 필요한 작업을 동적으로 선택하는 방법이있는 경우 들어오는 중입니다. – Vignesh

답변

4

유스 케이스를 잘 모르겠지만 필요한 작업을 정확하게 수행하는 것으로 보이는 오픈 소스 프로젝트가 있습니다.

우선, 너는 Apache Camel이있어, (정적 및/또는 동적으로) 경로를 구성 할 수 있습니다. 이렇게하면 구성된 라우트에 따라 파이프 라인의 각 구성 요소를 통해 이벤트 스트림을 라우트 할 수 있습니다.

Camel 이외에도 또는 Drools FusionEsper은 복잡한 이벤트 처리 (즉, 이벤트 필터링, 상관 관계, 분리 등)를하는 두 개의 오픈 소스 프로젝트입니다. 둘 다 규칙/쿼리의 동적 추가/제거를 지원합니다. 따라서 경로를 변경하는 대신 Drools/Esper 세션에 단일 경로를 설정하고 필요한 작업을 수행하기 위해 구성에 따라 규칙/쿼리를 추가/제거 할 수 있습니다.

"규칙 엔진"을 만들 필요가 없다고 생각됩니다. 밖에있는 것을 사용할 수 있습니다.