spring boot 에 서 는 RabbitMQ routing 경로 에 대한 자세 한 설명 을 사용 합 니 다.

이전 튜 토리 얼 에서 우 리 는 부채 형(fanout)교환 기 를 만 들 었 다.우 리 는 이미 방송 한 소식 의 형식 을 여러 소비자 에 게 전달 할 수 있다.
뭐 할 거 예요?라 우 팅 경로
이 튜 토리 얼 에 새로운 기능 을 추가 하면 메시지 의 일부분 만 구독 할 수 있 습 니 다.예 를 들 어 관심 있 는 색상("orange","black","green")만 연결 하고 메 시 지 를 모두 콘 솔 에 인쇄 합 니 다.
귀속
교환기 와 대기 열 은 연결 관계 이다.간단 한 이 해 는 대기 열 이 이 교환기 에서 온 정보 에 관심 이 있다 는 것 이다.
바 인 딩 은 추가 적 인 인자 routingKey 를 추가 할 수 있 습 니 다.Spring-amqp 는 알 기 쉬 운 API(작성 자 모드)를 사용 하여 그들의 관 계 를 매우 명확 하 게 한다.교환기 와 대기 열 을 Binding Builder 에 넣 으 면 대기 열 을 공유 키(routingKey)로 교환기 에 쉽게 연결 할 수 있 습 니 다.

@Bean
public Binding binding0a(DirectExchange directExchange, Queue autoDeleteQueue0) {
  return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with("orange");
}
이 는 바 인 딩 키 가 교환기 형식 에 의존 하면 fanout 교환기 가 바 인 딩 할 수 있 는 옵션 이 없 음 을 의미 합 니 다.
직 결 교환기
이전 튜 토리 얼 에서 우리 의 정보 시스템 은 모든 소비자 에 게 방송 으로 전달 되 었 다.색상 기반 필 터 를 추가 하기 위해 기능 을 확장 하고 싶 습 니 다.예 를 들 어 자세 한 오류 메 시 지 를 받 고 하 드 디스크 를 로그 로 쓰 려 면 Info 나 경고 로 그 를 받 지 않 습 니 다.
  • fanout 교환 기 는 이 조작 을 실현 할 수 없습니다.왜냐하면 그것 은 어 리 석 은 방송 만 할 수 있 기 때 문 입 니 다
  • 4.567917.우 리 는 직접 direct 교환 기 를 사용 하여 대체 합 니 다.직렬 교환기 뒤의 경로 알고리즘 은 매우 간단 합 니 다.바 인 딩 키 는 메시지 의 경로 키 와 정확하게 일치 해 야 이 메 시 지 는 대기 열 에 들 어 갈 수 있 습 니 다
    주황색,검은색,녹색 세 가지 경로 키
    위의 그림 과 같이 직렬 교환기 x 에 두 개의 대기 열 이 연결 되 어 있 습 니 다.첫 번 째 대기 열 에서 루트 키 를 사용 하 는 것 은 오렌지 이 고,두 번 째 는 루트 키 2 개,블랙 과 그린 이 있 습 니 다.
    이 설정 에서 경로 키 를 오렌지 로 사용 하 는 메 시 지 를 교환기 에 보 낼 때 이 메 시 지 는 대기 열 Q1 로 연 결 됩 니 다.메시지 에 사용 되 는 경로 키 가 black 이나 green 일 때 Q2 로 연 결 됩 니 다.나머지 경로 키 를 사용 하지 않 은 메 시 지 는 버 려 집 니 다.
    병렬 연결

    병렬 연결
    이것 은 팬 아웃 교환기 와 유사 한 기능 을 실현 할 수 있다.
    거의 다 르 지 않 습 니 다.코드 를 보 세 요.
    Config.java
    
    package com.zb.rabbitMQtest.t4routing.config;
    
    import org.springframework.amqp.core.*;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author   
     */
    @Configuration(value = "t4Config")
    public class Config {
    
      /**
       *    :  
       *   :2018/3/5   10:45
       * @apiNote        
       */
      @Bean
      public DirectExchange directExchange() {
        return new DirectExchange("direct-exchange");
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @apiNote           
       */
      @Bean
      public Queue autoDeleteQueue0() {
        return new AnonymousQueue();
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @apiNote           
       */
      @Bean
      public Queue autoDeleteQueue1() {
        return new AnonymousQueue();
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @param directExchange      
       * @param autoDeleteQueue0       
       * @apiNote          orange   autoDeleteQueue0          
       * @return Binding
       */
      @Bean
      public Binding binding0a(DirectExchange directExchange, Queue autoDeleteQueue0) {
        return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with("orange");
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @param directExchange      
       * @param autoDeleteQueue0       
       * @apiNote          black   autoDeleteQueue0          
       * @return Binding
       */
      @Bean
      public Binding binding0b(DirectExchange directExchange, Queue autoDeleteQueue0) {
        return BindingBuilder.bind(autoDeleteQueue0).to(directExchange).with("black");
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @param directExchange      
       * @param autoDeleteQueue1       
       * @apiNote          black   autoDeleteQueue1          
       * @return Binding
       */
      @Bean
      public Binding binding1a(DirectExchange directExchange, Queue autoDeleteQueue1) {
        return BindingBuilder.bind(autoDeleteQueue1).to(directExchange).with("black");
      }
    
      /**
       *    :  
       *   :2018/3/5   10:48
       * @param directExchange      
       * @param autoDeleteQueue1       
       * @apiNote          green   autoDeleteQueue1          
       * @return Binding
       */
      @Bean
      public Binding binding1b(DirectExchange directExchange, Queue autoDeleteQueue1) {
        return BindingBuilder.bind(autoDeleteQueue1).to(directExchange).with("green");
      }
    }
    
    
    Receiver.java
    
    package com.zb.rabbitMQtest.t4routing.receiver;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    /**
     * @author   
     */
    @Component(value = "t4Receiver")
    public class Receiver {
    
      @RabbitListener(queues = "#{autoDeleteQueue0.name}")
      public void receiver0(String str) {
        System.out.println("receiver0++++++++++:" + str);
      }
    
      @RabbitListener(queues = "#{autoDeleteQueue1.name}")
      public void receiver1(String str) {
        System.out.println("receiver1++++++++++:" + 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.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    /**
     * @author   【[email protected]】
     */
    @Component(value = "t4Send")
    public class Send {
      @Autowired
      private DirectExchange directExchange;
      @Autowired
      private RabbitTemplate rabbitTemplate;
      private String[] keys = {"orange", "black", "green"};
    
      public void send() {
        String message = "   ";
        for (int i = 0; i < 5; i++) {
          System.out.println("send++++++++++:".concat(message));
          rabbitTemplate.convertAndSend(directExchange.getName(), keys[2], message);
        }
      }
    }
    SendTest.java
    
    package com.zb.rabbitMQtest.t4routing.send;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    /**
     * @author   
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SendTest {
      @Autowired
      private Send send;
    
      @Test
      public void send() throws Exception {
        send.send();
      }
    }
    
    
    테스트 결과 키스[0]이면 receiver 0 만 있 고 키스[1]이면 라디오 처럼 receive 0 과 receive 1 이 있 고 키스[2]면 receive 1 만 있 습 니 다.
    keys[0]시
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    keys[1]시
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 0++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 0++++++++:하하 하
    keys[2]시
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    send++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    receiver 1+++++++++:하하 하
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기