8-2. Message Broker 활용

khs·2022년 3월 27일
0

Java Spring Boot

목록 보기
33/34

Job Queue와 Publish Subscribe pattern을 구현해보자.

start.spring.io로 이동해서 아래와 같이 프로젝트를 생성한 후 실행한다.

Message Broker에서 큐에 연결되어 있는 두 서버에서 메시지를 생성하는 주체를 producer, 메시지를 소모하는 주체를 consumer라고 한다. 따라서 이름을 producer로 하나, consumer하나 총 2개의 프로젝트를 만든다.

producer 프로젝트를 실행시키고 config 패키지를 만든 후 그 안에 ProducerConfig.java 클래스를 만들고 아래와 같이 작성한다.

job 큐를 만들 때는 메시지를 받는 주체가 명백하게 정의되어 있다. 그래서 exchange가 필요하긴한데 어느정도 생략이 가능하다. (겉으로 보기에는 안 만든 것처럼 보일 수 있다..!) 따라서 큐만 직접 정의해주면 된다.

Queue(큐 이름, 서버가 꺼졌다 켜져도 큐가 남아있을 것인지, 중복 가능한지, 이 서버가 꺼져서 필요없을 때 자동으로 삭제 될 것인지);

그리고 service 패키지를 만든 후 안에 ProducerService.java 클래스를 아래와 같이 작성한다.

그리고 큐를 보내는 메소드도 이어서 작성한다.

그리고 테스트를 하기 위해 간단하게 controller 하나를 만든다.

producer 완성!
이번엔 consumer를 작성해보자. consumer 프로젝트를 실행시키고 config 패키지를 만들고 ConsumerConfig.java 클래스를 아래와 같이 작성한다.

(consumer 같은 경우 producer쪽에서 큐를 선언했기 때문에 config를 작성하지 않아도 되는데 프로젝트 내 다른 코드에서 바로바로 큐를 필요로하는 경우가 있어서 큐가 없으면 문제가 생길 수도 있기 때문에 작성해준다..!)

그리고 service 패키지를 만든 후 그 안에 ConsumerService.java를 만들고 아래와 같이 작성한다.

이제 producer, consumer 두개 프로젝트의 빌드를 진행해보자.

그리고 producer 프로젝트에서 아래와 같이 서버를 띄우고

consumer 프로젝트에서는 포트 번호를 바꾸고 서버를 2개 띄운다. (8081, 8082)

 java -jar build/libs/consumer-0.0.1-SNAPSHOT.jar --server.port=8081

그리고 localhost:8080 으로 들어간 후에 새로고침은 4번가량 해주면 producer 콘솔창에 아래처럼 로그가 찍히는 것을 확인할 수 있다.

그리고 consumer 프로젝트에보면 8081 포트에서는 아래와 같이 나오고

8082 포트에서는 아래와 같이 나눠서 받아지는 것을 확인할 수 있다.

이번에는 새로운 프로젝트를 생성해보자. 아래와 같은 설정에publisher, subscriber 하나씩 생성한다.

publisher 프로젝트를 실행하고 producer과 비슷한 방향으로 진행할 것이다. config 패키지를 만들고 그 안에 PublisherConfig.java 파일을 아래와 같이 작성한다. producer에서는 큐를 직접적으로 만들었는데 이번에는 큐를 선언하지 않는다. (이게 차이점!)

그리고 service 패키지를 만든 후에 그 안에 PublisherService.java 파일을 아래와 같이 작성한다.

그리고 이것을 테스트하기 위한 컨트롤러를 작성한다. controller 패키지를 만든 후 PublisherController.java 파일을 아래와 같이 작성한다.

그리고 이제 위에서처럼 실행을 하면 subscriber 에 해당하는 포트는 동일한 로그가 찍히는 것을 확인할 수 있다.

이렇게하면 publisher 프로젝트 완성. 이제 subscriber 프로젝트를 작성해보자.

publisher와 마찬가지로 config 패키지안에 SubscriberConfig.java 파일을 아래와 같이 작성한다.

profile
권혁상입니다. 행복코딩^_^

0개의 댓글