Skip to content

[RabbitMQ] Topics(패턴화된 routing key로 선택적으로 message 받기)

2012/02/10

Topics

이전 포스트에서는 정형화된 routing key를 이용해서 direct exchange와 queue간 바인딩하는 방법에 대해 알아봤습니다.

하지만 여기에 조금더 유연성과 확장성을 고려하여 정규식 패턴으로된 routing key를 지정하여 바인딩하는 Topic exchange가 있습니다.

선언은 다음과 같이 합니다.

channel.exchangeDeclare(EXCHANGE_NAME, "topic");

그리고 routing key는 다음과 같이 dot<.>로 구분된 단어 리스트 형식을 가져야 합니다.

"단어.단어", "단어.단어.단어", "*.단어.*, "단어.#" 등등..
> *(star) : 임의의 한 단어를 대신합니다.
> #(hash) : 0 개 이상의 단어를 대신합니다.

위 그림과 같이 topic exchange에 2개의 queue가 각각의 routing key로 바인딩 되어 있다고 할때 의미는 다음과 같습니다.

> Q1 : routing key가 2개의 dot로 구분된 3개 단어로 구성되면서 가운데 “orange”가 들어있는 message가 전달된다.

> Q2 : routing key가 2개의 dot로 구분된 3개의 단어로 구성되면서 마지막 단어가 “rabbit”인 message가 전달되며, 또한 routing key가 한개 이상의 dot로 구분되면서 첫번째 단어가 “lazy”인 message도 전달이 됩니다.

그래서 만약 “quick.orange.rabbit” 라는 routing key를 가지는 message는 Q1과 Q2에 전달이 됩니다. 그리고 “lazy.brown.fox” 라는 routing key를 가지는 message는 Q2의 두개의 조건에 모두 만족하지만 한번만 전달되게 됩니다.

마지막으로 Topic exchange는 다른(fanout, direct) exchange 타입과 같은 동작을 할수 있습니다. routing key=”#” 를 지정한다면 모든 message를 받기 때문에 fanout과 같이 동작하며, routing key=”단어” 와 같이 “*”와 “#”를 쓰지 않는다면 direct와 같이 동작하게 됩니다.

 

No comments yet

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: