2017-10-05 11 views
0

이것이 적절한 장소라고 확신하지는 않지만 게시/가입 메시징 시스템을 구현하는 RabbitMQ의 기능에 대한 질문이 있습니다. 나는 그것이 내가 일하는 회사의 요구에 맞는 있는지 확인하기 위해 RabbitMQ를 조사하고, 나는 공식 문서 또는 인터넷에 하나 이러한 질문에 대한 답변을 찾을 수 없습니다 :RabbitMQ를 사용하는 소비자 그룹에 가입 하시겠습니까?

  • 것은 그것을 가능 소비자가 게시자 그룹에 가입 하시겠습니까? 구독하고자하는 그룹의 모든 게시자가 메시지를 교환기로 보내면 메시지를 구독자에게 전송하는 것이 가능할 수도 있습니다. 이것을 구현하는 데 가장 적합한 유형은 무엇입니까?
  • 주제 그룹에 가입 할 수 있습니까? 예를 들어 data_1, data_2 등의 "data"로 시작하는 여러 주제가있는 경우 소비자가 "data *"에 가입하게 할 수 있습니까? 나는 이것에 관해 아무것도 발견하지 못했다. 그러나 내가 교환기가 어떻게 작동하는지에 관해서 모인 것에서 그것은 가능해 보이지 않는다.
  • 하위 주제를 포함 할 수 있습니까, 심지어 하위 주제를 포함 할 수 있습니까? 내가 지금까지 이해 한 바에 따르면 주제 또는 헤더 교환, 하위 주제 및 하위 하위 주제 사용은 기본적으로 data.diag.signal과 같은 라우팅 키의 일부가됩니다.

나는 분명히 나 자신을 분명히하고 당신의 대답에 미리 감사드립니다.

답변

0

내 대답에는 Java API 예제가 사용됩니다.

소비자가 게시자 그룹에 가입 할 수 있습니까?

RMQ 소비자는 게시자를 알지 못합니다. 그들 사이의 엔터티는 대기열 (및 생산자 (게시자) 측과의 교환)입니다. Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer)은 하나의 대기열에서만 사용할 수 있습니다. 그러나 동일한 Consumer 콜백을 여러 대기열에 전달할 수 있습니다.

다른 방법으로는 소비자 단위 대기열을 생성하고 channel.queueBind을 사용하여 흥미있는 메시지를 생성하는 교환기에 바인드 할 수 있습니다. 아니면 좀 더 쉽게, 일반 교환기에 게시하고 해당 교환기에 바인딩하게하십시오.

주제 그룹에 가입 할 수 있습니까? 예를 들어 data_1, data_2 등의 "data"로 시작하는 여러 주제가있는 경우 소비자가 "data *"에 가입하게 할 수 있습니까? 나는 이것에 관해 아무것도 발견하지 못했다. 그러나 내가 교환기가 어떻게 작동하는지에 관해서 모인 것에서 그것은 가능해 보이지 않는다.

대기열 이름을 전달해야하므로 명시 적으로는 아닙니다. 는하지만 교환 라우팅 해결할 수 있습니다 를 현재의 상태 인 경우 :

producer1 -> exchange-data-1 -> queue-data-1 
producer2 -> exchange-data-2 -> queue-data-2 
producer3 -> exchange-data-3 -> queue-data-3 

당신은 또한 새로운 교환

producer1 -> exchange-data-1 --\ 
producer2 -> exchange-data-2 -> exchange-data-all -> queue-per-consumer -> your-consumer 
producer3 -> exchange-data-3 --/ 

는 하위 주제를 가질 수 있습니다을 설정할 수 있습니다, 심지어 하위 하위 소 픽스? 내가 지금까지 이해 한 바에 따르면 주제 또는 헤더 교환, 하위 주제 및 하위 하위 주제 사용은 기본적으로 data.diag.signal과 같은 라우팅 키의 일부가됩니다.

당신이 언급 한대로, 당신은 (풍부한 설계 또는 headers) topic 교류를 사용할 수있다 RMQ에는 하위 주제 개념은 없지만,.

+0

답변 해 주셔서 감사합니다. 매우 도움이됩니다. 주제 교환의 와일드 카드와 관련하여 A.B. * 또는 A. *. *와 같은 주제를 구독하는 것이 가능하지만 A. *. C와 같은 항목을 구독 할 수 있다는 것을 알고 있습니다. –