SpringBoot 에서 RabbitMQ 를 사용 하 는 튜 토리 얼 상세 설명
11752 단어 SpringBoot 사용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 를 사용 하 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Process Communication using AMQP with RabbitMQWhile RabbitMQ Receiver is running, it returns the below result every time it gets message from a sender. Process A send...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.