2015-02-05 6 views
3

두 큐는 다음 라우팅 키가있는 주제 교환에 바인딩 :라우팅 메시지

큐 A, 키 패턴 일치를 *.foo
대기열 B를 라우팅과 결합으로 결합 라우팅 키 패턴 일치 *.bar

foo 메시지 또는 bar 메시지가 아닌 메시지를받는이 교환기에 세 번째 큐를 추가하고 싶습니다. 이 대기열을 # 라우팅 키로 바인딩하면 당연히 필요한 모든 메시지가 표시되지만 foobar을 포함하여 원하지 않는 메시지는 모두 받게됩니다.

패턴을 패치하는 메시지를 라우팅하는 방법은 무엇입니까 NOT *.fooNOT *.bar?

답변

5

모든 바인딩과 일치하지 않는 모든 메시지를 수신하려면 Alternate Exchange을 사용하십시오. (

standard workflow --> [main exchange (topic)] 
        |  --> via binding *.foo --> [foo queue] 
        |  --> via binding *.bar --> [bar queue] 
        v  
      [alternate exchange (let it be topic too)] 
        --> via binding * --> [] 

을 더 구체적인 사례를 들어 당신이 N 바인딩이있는 경우 그러나 당신은 M 바인딩과 일치하지 않는 모든 메시지를 잡으려면 :

은 존재 하나의 대체 교환을 추가하고 수집하는 모든 메시지를 그 대체 거래소에서 여기서 M < N) 더 문제가 있지만 기술적으로 Dead Letter Exchange을 통해 수행 한 다음 M 바인딩 만있는 사용자 지정 교환에 게시 한 다음 대체 교환으로 대/소문자를 적용합니다. 하지만 성능이 떨어지는 것에 대해서도 생각조차하지 않는 녹슨 소리가 난다.

+0

새 바인딩 (즉, '#'이있는 관찰자)을 추가하면 AE/폴백이 작동하지 않으므로 AE를 사용하지 않는 것이 좋습니다. 이것은 실생활에서 일어날 수있는 일이며 예기치 않은 상호 작용으로 물건이 옆으로 빠져 나간다는 것입니다. – user2864740