RabbitMQ tutorial - Publish/Subscribe | RabbitMQ

일단 RabbitMQ의 chanel, exchange, queue관련 용어를 숙지한 상태에서 그림을 이해하면 좋다.

이벤트 발행, 구독 로직의 도식화

image.png

이벤트 발행자의 흐름

누군가 이벤트가 필요할수 있다고 판단해 이벤트를 발행하고 싶다면

이벤트를 라우팅해줄 exchange를 만들어 주기만 하면 된다.

아래는 크롤링시

이벤트 발생시 이벤트를 보낼 규칙을 적은 exchange(SCHOOL.NOTIFICATIONS)를 생성한 모습이다.

image.png

Exchange(SCHOOL.NOTIFICATIONS) 설정

// connection 생성
const conn = await amqplib.connect("amqp://localhost");

// chanel 생성
const ch = await this.conn.createChannel();

// topic 하는 Exchange (없으면 생성 있으면) 조회
// 인자 : (exchange 이름, 라우팅 규칙 타입, 옵션)
// 반환하는 exchange로 제어하는게 아닌 exchange 이름('CRAWLING')으로 규칙을 설정 및 발행함
await ch.assertExchange("SCHOOL.NOTIFICATIONS", "topic");

Exchange(SCHOOL.NOTIFICATIONS)로 이벤트 발행

// NEW_NOTICE 토픽의 이벤트 전송
ch.publish("SCHOOL.NOTIFICATIONS", "new.notice", Buffer.from("{\\"id\\": ...}"));