spring boot 에 서 는 RabbitMQ routing 경로 에 대한 자세 한 설명 을 사용 합 니 다.
8174 단어 springbootRabbitMQrouting
뭐 할 거 예요?라 우 팅 경로
이 튜 토리 얼 에 새로운 기능 을 추가 하면 메시지 의 일부분 만 구독 할 수 있 습 니 다.예 를 들 어 관심 있 는 색상("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 나 경고 로 그 를 받 지 않 습 니 다.
주황색,검은색,녹색 세 가지 경로 키
위의 그림 과 같이 직렬 교환기 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+++++++++:하하 하
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.