SpringBoot 에서 RabbitMQ 를 사용 하 는 튜 토리 얼 상세 설명

이 장 은 Erlang 및 RabbitMQ 가 설치 되 어 있 는 토대 위 에 세 워 졌 으 며,이어서 간단하게 사용 을 소개 합 니 다.
직접 모드
routingKey 와 exchange 를 통 해 결 정 된 유일한 quue 는 메 시 지 를 받 을 수 있 습 니 다.
在这里插入图片描述
1.우선 RabbitMQ 의 관리 인터페이스 에 가서 대기 열 을 새로 만 듭 니 다(Direct 모드)
在这里插入图片描述
2.테스트 항목 의 기초 구 조 는 다음 과 같다.
여기 서 테스트 를 편리 하 게 하기 위해 부모 프로젝트 에 두 개의 서브 모듈(생산자 와 소비자)을 직접 구축한다.
在这里插入图片描述
3.pom.xml 파일 의 의존 도 는 다음 과 같 습 니 다.
부모 항목:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <packaging>pom</packaging>
 <modules>
  <module>rab-consumer</module>
  <module>rab-producer</module>
 </modules>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.7.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>interview</groupId>
 <artifactId>rabbitmq-interview</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>rabbitmq-interview</name>
 <description>Demo rabbitmq project for Spring Boot</description>

 <properties>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <!--1、amqp         -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>
		<!--2、     -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.amqp</groupId>
   <artifactId>spring-rabbit-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>
4.보 낼 데이터 준비
IDEA 로 돌아 가 하위 모듈 의 생산자 모듈 을 엽 니 다.제 쪽 은 rab 입 니 다.producer,resource 에서 springboot 설정 파일 을 만 듭 니 다:application.yml 파일,내용 은 다음 과 같 습 니 다.

spring:
 rabbitmq:
 host: localhost
# host  RabbitMQ     
다음 에 SpringBoot 의 시작 클래스 를 새로 만 듭 니 다:

@SpringBootApplication
public class RabbitMQApplication {
 public static void main(String[] args) {
  SpringApplication.run(RabbitMQApplication.class);
 }
}
그리고 새 테스트 클래스:

@RunWith(SpringRunner.class) //     
@SpringBootTest(classes = RabbitMQApplication.class) // SpringBoot   (    )
public class RabTest {
 @Autowired
 private RabbitTemplate rabbitTemplate; //     RabbitMQ     ,         

 //        (Direct)   ,     
 @Test
 public void sendQueue(){
  System.out.println("            !");
  //   1:          2:     
  rabbitTemplate.convertAndSend("weiku","message:      !");
  System.out.println("      !");
 }
}
테스트 방법 을 실행 하면 메 시 지 를 대기 열(weiku)에 보 낼 수 있 습 니 다.
메시지 가 소비 되 지 않 으 면 관리 인터페이스 에서 볼 수 있 습 니 다:
在这里插入图片描述
3.소비자 수신 준비
IDEA 로 돌아 가서 하위 모듈 을 여 는 소비자 모듈 입 니 다.제 쪽 은 rab 입 니 다.consumer,하위 모듈 에 시작 클래스 를 만 듭 니 다.내용 은 다음 과 같 습 니 다.
在这里插入图片描述

@SpringBootApplication
public class RabbitMQApplication {
 public static void main(String[] args) {
  SpringApplication.run(RabbitMQApplication.class);
 }
}
완료 후 메 시 지 를 받 는 모니터 를 정의 하고 Spring 용기 에 주입 합 니 다.코드 는 다음 과 같 습 니 다.

@Component //      Spring   
@RabbitListener(queues = "weiku") //         
public class Consumer1 {
 @RabbitHandler //       
 public void showMSG(String message){ //     producer    Object  ,                ,      
  System.out.println("weiku        :" + message);
 }
}
준비 가 끝 난 후에 실행 시작 류 는 우리 가 방금 보 낸 Direct 점 대 점 의 메 시 지 를 받 을 수 있 습 니 다.이런 모델 의 메 시 지 는 한 소비자 만 소비 할 수 있 습 니 다.운행 결 과 는 다음 과 같 습 니 다.
在这里插入图片描述
2.fanout 방송 모드
在这里插入图片描述
우선 RabbitMQ 의 관리 인터페이스 에 경로 교환기(Exchange)를 추가 해 야 합 니 다.
在这里插入图片描述
새 경로 가 끝 난 후에 몇 개의 대기 열 을 더 만들어 야 합 니 다.그림 과 같 습 니 다.
在这里插入图片描述
그 후에 아직 끝나 지 않 았 습 니 다.새 경로 와 새 대기 열 을 연결 해 야 합 니 다.
在这里插入图片描述
그림 인터페이스 나타 나 기:
在这里插入图片描述
바 인 딩 이 완료 되면 코드 테스트 를 시작 합 니 다.
5.게시/구독 코드 테스트 진행
생산자:

//        ,                  
@Test
public void sendFanout(){
 System.out.println("         (      Queue       )");
 //   1:      2:       3:       
 rabbitTemplate.convertAndSend("weiku-work","","                !");
 System.out.println("      !");
}
소비자:
소비자 1:

@Component //      Spring   
@RabbitListener(queues = "weiku") //         
public class Consumer1 {
 @RabbitHandler //       
 public void showMSG(String message){ //     producer    Object  ,                ,      
  System.out.println("weiku        :" + message);
 }
}
소비자 2:

@Component //      Spring   
@RabbitListener(queues = "weiku1") //         
public class Consumer2 {
 @RabbitHandler //       
 public void getMSG(String msg){
  System.out.println("weiku1       :" + msg);
 }
}
소비자 3:

@Component //      Spring   
@RabbitListener(queues = "weiku2") //         
public class Consumer3 {
 @RabbitHandler //       
 public void getMSG(String msg){
  System.out.println("weiku2       :" + msg);
 }
}
먼저 생산자 의 테스트 메 시 지 를 보 내 는 방법 을 실행 하고 소비자 의 SpringBoot 시작 류 를 실행 합 니 다.
실행 결 과 는 다음 과 같 습 니 다.
在这里插入图片描述
3.Topic 어댑터 모드
topic 테마 모드 가 모호 하 게 일치 합 니 다.정확 한 일치 가 아 닙 니 다.
在这里插入图片描述
테 마 를 보 낼 루트 를 새로 만 듭 니 다.
在这里插入图片描述
루트 를 새로 만 든 후,발 표 된 토픽 을 받 기 위해 세 개의 대기 열 을 새로 만 듭 니 다.그림:
在这里插入图片描述
다음 에 우리 가 새로 만 든 대기 열과 루트 를 연결 해 야 합 니 다.그림 과 같 습 니 다.
在这里插入图片描述
이 곳 의\#는 모든 유형 이 일치 하 는 것 을 대표 합 니 다.
이상 의 준비 완료 후 코드 테스트 시작:
테스트 1:
생산자:

@Test
public void sendTopic1(){
 System.out.println("          !  2:routingKey");
 //   1:       2:         
 rabbitTemplate.convertAndSend("weiku-topic","good.log","    good.log  ");
}
이 세 개의 대기 열 은 모두 일치 하기 때문에 데 이 터 를 받 을 수 있 습 니 다.
소비자:
소비자 1:

@Component
@RabbitListener(queues = "wk0")
public class Con1 {
 @RabbitHandler
 public void getMSG(String msg){
  System.out.println("wk0      :" + msg);
 }
}
소비자 2:

@Component
@RabbitListener(queues = "wk1")
public class Con2 {
 @RabbitHandler
 public void getMSG(String msg){
  System.out.println("wk1       :" + msg);
 }
}
소비자 3:

@Component
@RabbitListener(queues = "wk2")
public class Con3 {
 @RabbitHandler
 public void getMSG(String msg){
  System.out.println("wk2       :" + msg);
 }

 /**
  *       ,        queue 
  * @param map
  */
 @RabbitHandler
 public void getMSG(Map map){
  System.out.println("wk2   (map)    :" + map);
 }
 @RabbitHandler
 public void getMSG(List list){
  System.out.println("wk2   (list)    :" + list);
 }
}
SpringBoot 를 시작 합 니 다.실행 결 과 는 다음 과 같 습 니 다.
在这里插入图片描述
在这里插入图片描述
여기 세 개의 대열 이 모두 규칙 에 부합 되 기 때문에 모두 소식 을 소비 할 수 있다.
테스트 2:
생산자:

@Test
public void sendTopic2(){
 System.out.println("          !  2:routingKey");
 rabbitTemplate.convertAndSend("weiku-topic","  .log","       .log  ");
 rabbitTemplate.convertAndSend("weiku-topic","  .log","       .log  ");
}
소비자 운행 결과:
在这里插入图片描述
在这里插入图片描述
이 곳 은 wk1 만 메 시 지 를 받 을 수 있 습 니 다.wk1 이.log 로 끝나 기 때 문 입 니 다.
테스트 3:
생산자:

@Test
public void sendTopic3(){
 // 1.       
 Map map = new HashMap();
 map.put(1,"a");
 map.put(2,"b");
 List list = new ArrayList();
 list.add("qq");
 list.add("ww");
 list.add("SS");
 System.out.println("          !  2 routingKey");
 // 2.      (   2 )
 // 2.1       map  
 rabbitTemplate.convertAndSend("weiku-topic","good.txt",map);
 // 2.2       list  
 rabbitTemplate.convertAndSend("weiku-topic","good.txt",list);
}
소비자 운행 효 과 는 다음 과 같다.
在这里插入图片描述
在这里插入图片描述
이 곳 은 wk2 만 메 시 지 를 받 을 수 있 고 지정 한 유형의 모니터 에 의 해 소 비 됩 니 다.
이로써 우리 의 테스트 는 끝났다.
SpringBoot 에서 RabbitMQ 를 사용 하 는 튜 토리 얼 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 SpringBoot 에서 RabbitMQ 를 사용 하 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기