이전 튜토리얼에서 팬 아웃 스위치를 만들었습니다. 방송 형태로 여러 소비자에게 메시지를 전달할 수 있습니다.
무엇을해야합니까? 라우팅
이 튜토리얼에서 메시지의 일부만 구독 할 수있는 새로운 기능을 추가하십시오. 예를 들어, 우리가 관심있는 색상 만 ( "오렌지", "검은 색", "녹색") 만 연결되고 모든 메시지가 콘솔에 인쇄됩니다.
묶다
스위치와 대기열은 바인딩 관계입니다. 간단한 이해는 대기열 이이 교환의 정보에 관심이 있다는 것입니다.
추가 매개 변수 라우팅 키로 바인딩을 추가 할 수 있습니다. Spring-Amqp는 간단하고 이해하기 쉬운 API (Builder Mode)를 사용하여 그들 사이의 관계를 매우 명확하게합니다. 스위치와 큐를 바인딩 빌더에 넣고 라우팅 키 (라우팅 키)로 스위치에 큐를 쉽게 바인딩합니다.
@BeanPublic Binding Binding0a (DirectExChange DirectExChange, 큐 autodeletequeue0) {return bindingBuilder.bind (autodeletequeue0) .to (DirectExchange) .with ( "Orange");}이는 바인딩 키가 스위치 유형에 따라 다르며 팬 아웃 스위치는 바인딩 할 수있는 옵션 없이는 수행 할 수 없음을 의미합니다.
직접 연결 스위치
이전 자습서에서 우리의 메시징 시스템은 방송 형태로 모든 소비자에게 전달되었습니다. 색상 유형을 기반으로 필터를 포함하도록 기능을 확장하려고합니다. 예를 들어, 정보 나 경고 로그를 수신하지 않고 자세한 오류 메시지를 수신하고 하드 디스크에 로그로 작성하는 프로그램을 원합니다.
세 가지 라우팅 키 : 주황색, 검은 색 및 녹색
위 그림과 같이, 직접 연결 교환 x에 바인딩 된 2 개의 대기열이 있습니다. 첫 번째 대기열은 라우팅 키를 사용하여 주황색이고 두 번째는 검은 색과 녹색의 2 개의 라우팅 키가 있습니다.
이 설정에서 라우팅 키를 사용하는 메시지가 스위치로 푸시되면 메시지가 큐 Q1로 라우팅됩니다. 메시지에서 사용하는 라우팅 키가 검은 색 또는 녹색 인 경우 Q2로 라우팅됩니다. 라우팅 키를 사용하지 않는 나머지 메시지는 폐기됩니다.
병렬 바인딩
병렬 바인딩
이것은 팬 아웃 스위치와 유사한 기능을 구현할 수 있습니다.
거의 코드를보십시오
config.java
package com.zb.rabbitmqtest.t4routing.config; import org.springframework.amqp.core.*; import org.sprameframework.context.annotation.bean; import org.springframework.context.annotation.configuration;/** @author zhang bo*/ @ @ @ @ @ @author zhang zhang zhang zhang zhang zhang zhang zhang zhang. "t4config") public class config {/*** 작성자 : Zhang Bo* 시간 : 2018/3/5 10:45 AM* @apinote direct-connected exchange 정의*/@bean public directexchange directexchange () {return new DirectexChange ( "Direct-Exchange"); }/*** Creator : Zhang Bo* 시간 : 2018/3/5 10:48 AM* @apinote 정의 익명 대기열을 자동으로 삭제하려면*/@bean public queue autodeletequeue0 () {return new Anonymousqueue (); }/*** Creator : Zhang Bo* 시간 : 2018/3/5 10:48 AM* @apinote 정의 익명 대기열을 자동으로 삭제하려면*/@bean public queue autodeletequeue1 () {return new Anonymousqueue (); }/*** 작성자 : Zhang Bo* Time : 2018/3/5 10:48 AM* @Param DirectExChange Direct-Connected Switch* @Param AutoDeleteQueue0 직접 연결된 스위치*/@Bean Public BINGUE에 대한 라우팅 키 오렌지 퀘이트를 사용하여 Queue* @apinote 바인딩*/@bean queue (DirectExchange DirectexChange,, DirectexChange) autodeletequeue0) {return bindingbuilder.bind (autodeletequeue0) .to (DirectExchange) .with ( "Orange"); }/*** 작성자 : Zhang Bo* Time : 2018/3/5 10:48 AM* @Param DirectExChange DirectExChange* @Param AutoDeletequeue0은 자동으로 큐를 삭제* @apinote 바인딩 직접 스위치에 대한 라우팅 키 블랙 큐*/@bean public binding0b (DirectExchange, Queexeate) return bindingBuilder.bind (autodeletequeue0) .to (DirectExChange) .with ( "black"); }/*** 작성자 : Zhang Bo* Time : 2018/3/5 10:48 AM* @Param DirectExChange DirectExChange* @Param AutoDeleteQueue1은 직접 스위치에 대한 autodeletequeue1 큐를 사용하여 Queue* @apinote 바인딩*/@Bean 바인딩*/@Beenhange11A autodeletequeue1) {return bindingbuilder.bind (autodeletequeue1) .to (directexChange) .with ( "black"); }/*** 작성자 : Zhang Bo* Time : 2018/3/5 10:48 AM* @Param DirectExChange DirectExChange* @Param AutoDeletequeue1 직접 스위치에 대한 라우팅 키 녹색 큐를 사용하여 Queue* @apinote 바인딩*/@Bean Public Bonding1B (DirectExtue1) (DirectExchange, queecange1). return bindingBuilder.bind (autodeletequeue1) .to (DirectExchange) .with ( "green"); }} 수신기. 자바
package com.zb.rabbitmqtest.t4routing.receiver; import org.springframework.amqp.rabbit.annotation.rabbitlistener; import org.spramframework.stereotyp.component;/*** @author zhang bo*/ @component (value = "t4recever"). @RabBitListener (queues = "#{autodeletequeue0.name}") public void receiver0 (String) {system.out.println ( "수신기 0 +++++++++++ :"+str); } @RabbitListener (queues = "#{autodeletequeue1.name}") public void receiver1 (string str) {system.out.println ( "수신기 1 +++++++++++ :"+str); }} send.java
package com.zb.rabbitmqtest.t4routing.send; import org.springframework.amqp.core.directexchange; import org.springframework.amqp.rabbit.core.rabbittemplate; import org.springframework.beans.annotation.antowireat; org.springframework.stereotyp.component;/** * @author zhang bo 【[email protected]】 */ @component (value = "t4send") public class {@autowired private directexchange directexchange; @autowired private rabbittemplate 토끼를 찍는다; 개인 문자열 [] 키 = { "오렌지", "검은 색", "녹색"}; public void send () {문자열 메시지 = "hahaha"; for (int i = 0; i <5; i ++) {system.out.println ( "+++++++++++++ :". concat (메시지)); Rabbittemplate.convertandSend (DirectExchange.getName (), 키 [2], 메시지); }}}
sendtest.java
package com.zb.rabbitmqtest.t4routing.send; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.actory.annotation.autowired; import org.springframework.boot.test.context.spridertest; org.springframework.test.context.junit4.springrunner;/*** @author zhang bo*/ @runwith(springrunner.class)@springboottestpublic class sendtest {@autowired 개인 보내기 보내기; @test public void send ()는 예외 {send.send (); }} 테스트 결과 : 키 [0] 인 경우 수신기 만 있습니다. 키 [1] 인 경우, 수신 및 수신 1이있는 방송과 유사합니다. 키 [2]이면 수신기 만 있습니다.
키가 될 때 [0]
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하열쇠 [1]
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하
수신기 0 +++++++++++++++ : 하하하
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 0 +++++++++++++++ : 하하하
수신기 1 +++++++++++++++ : hahahaha
수신기 0 +++++++++++++++ : 하하하열쇠 [2]
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
+++++++++++++++ 이상을 보내십시오 : Hahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
수신기 1 +++++++++++++++ : hahahaha
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.