2016-11-17 1 views
1

다음 이벤트가 발생하면 특정 속성 값이있는 이벤트를 구독 할 수 있습니까? 예를 들어, OperationTypeId = 3 인 이벤트 만 구독하십시오.NServiceBus : 특정 속성 값이있는 이벤트 구독

public interface IServerEvent : IEvent 
{ 
    int OperationTypeId { get; set; } 
    string SomeValue { get; set; } 
} 

NServiceBus 6.0.0을 사용하고 있습니다.

이 사용 사례는 새 OperationType을 서버에 만들 수 있으므로 "일반"이벤트 구조가 필요합니다. 구독자가 관심있는 OperationType에 대한 이벤트 만 수신하고 게시자가 모든 구독자에게 모든 이벤트를 보내고 구독자 필터를 만들지 않아도되는 기능을 원합니다.

NServiceBus의 게시 측에서 게시 된 이벤트 수를 줄이기 위해 필터를 처리 할 수 ​​있기를 기대합니다.

답변

1

백신에서는 사용할 수 없지만 RabbitMq를 백엔드 용으로 사용하는 경우 IRoutingTopology를 사용하여 라우팅 키 OperationTypeId를 사용하여 특정 메시지를 라우팅 할 수 있습니다. 그러면 특정 라우팅 키에만 가입 할 수있는 동일한 토폴로지를 사용자가 가질 수 있습니다.

+0

를 "보통 피해야한다 위험한 패턴이기 때문이다." 귀하의 제안에 감사드립니다. –

+0

AFAIK - 위의 사용자가 제안한대로 예제를 변경할 수없는 경우 원하는 것을 수행 할 수있는 유일한 방법입니다. NSB는 컨텍스트 기반 라우팅을 허용하지 않을 때 커지지 만 RabbitMq를 사용할 때는 허점이 있습니다. – Charles

1

브라이언, 이전의 대답은 일반적으로 유형이나 인터페이스 등으로 다른 내용을 차별화하고 해당 유형에만 가입하는 것이 옳습니다 게시자가 차별화 할 수 있습니다.

다른 이벤트가 이러한 이벤트인지 생각할 수 있습니까? 콘텐츠를 강력하게 입력 할 수없고 즉시 변경할 수있는 일반 메시지가 붙어있는 경우 내장 유형 기반 라우팅을 포기하고 메시지 발송을 직접 관리 할 수 ​​있습니다. 예를 들어 OperationTypeId에서 콘텐츠 기반 라우터를 사용하고 싶지만 명령을 사용하고 전달할 수 있습니다.

최근 여전히 여기에 몇 가지 잠재적 인 유연성을 허용 할 버전 6에서 일부 고객 라우팅 기능이 있습니다 :이 문서의 예를 참조하십시오 https://docs.particular.net/samples/routing/custom/

안부, 조는 가입의 단점은 무엇

+0

Joe,이 권리를 읽으면이 솔루션은 아키텍처를 바꾸고 라우터를 허브로 만들 것입니다. 그것이 최선의 방법이라면 우리는 내가 검토해야 할 토끼 MQ 같은 것을 가지고 끝낼 수도 있습니다. 기사 주셔서 감사합니다! –

4

당신의 기준과 일치하고 나머지는 무시하는 것에 대해서만 행동합니까?

게시자 측에서 특정 값을 가진 이벤트가 비즈니스에 중요한 의미를 갖는 경우 해당 일반 이벤트를 중단하고 더 미세한 입자를 게시해야 할 수 있습니다.

NServiceBus가 콘텐츠 기반 라우팅을 지원하지 않는 이유에 대해서는 this이 원저자에게 좋은 읽을 거리가 될까요?

TL; DR 우리는뿐만 아니라 솔루션으로 RabbitMQ을 검토 할 것

+0

하디, 기사 주셔서 감사 드리며 요점과 우디를 이해합니다.나는 정적 메시지보다 융통성을 중요하게 여기는 시스템에 대해 연구하고 있는데, 필자가 동의하지는 않지만 양쪽을 이해할 필요가있다. –