RabbitMQ 기본설정

RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커. AMQP는 MQ를 오픈 소스에 기반한 표준 프로토콜. 프로토콜만 맞다면 다른 AMQP를 사용한 애플리케이션끼리 통신이 가능하고 플러그인을 통해서 SMTP, STOMP 프로토콜과의 확장이 가능.

pom.xml spring-boot-starter-amqp 추가 한다.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.46</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

application.properties 설정

Book 객체 생성

Controller 작성

일반적으로 spring-boot-data-amqp 는 자동 ACK(nowledgement) 이다. 즉 소비자(Consumer)는 MQ 는 message 소비완료되고 자동으로 ACK 한다. 하지만 여기서 약간의 문제가 있는데 바로 이렇게 하는경우 "에러 발생"시 message는 유실되지 않겠지만 무한으로 루프를 돌기때문에 Disk 공간을 모소할수 있다. 소비회수를 지정할수 있지만 이 또한 완벽한 해결방법은 아니라고 한다. 현재 가장 이상적인 방법은 수동 ACK 설정으로 하고 "에러발생" 시 message를 다른 message대기 열에 넣어 보상처리한다.

main class

application 구동하면

Last updated