일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- VUE
- EBS
- AWS
- 리덕스 공식문서
- 자료구조
- .getClass()
- 오라클
- react
- 리덕스
- 오라클 병렬처리
- paraller
- 도커빌드
- Express
- rabbitmq 에러
- vue.js
- quert
- 애그리거트
- 트리 회전
- $emit()
- 커스텀 로그인
- 네임드 뷰
- forNmae()
- redux
- 리액트
- Java Reflextion API
- ACCESS_REFUSED
- exiting abnormally
- 컴포넌트 주도
- 자바
- REDIS
- Today
- Total
개발정리
publish/subscribe 본문
이전의 튜토리얼 에서는 우리는 work queue를 만들었습니다. 추측 하건데,워크 큐는 각각의 task를 정확히 한 워커에 전달합니다.
이번 예제에는 무언가 전혀 다른 것을 할 것 입니다.
-우리는 메세지를 여러 consumer들로 전달할 것 입니다.
이러한 패턴을 "pub/sub"이라고 합니다.
이런 패턴을 보여주기 위해 우리는 간단한 로깅 시스템을 구축 할 것 입니다.
이것은 두 프로그램들로 구성될 것 입니다.
첫째는 로그 메세지를 발행할 것 이고,두번째는 메세지를 받아 출력할 것 입니다.
우리들의 로깅 시스템에서 모든 receiver program들은 메세지를 받을 것 입니다.
그러한 방식으로 우리는 한 receiver를 실행 시킬 수 있으며 로그들을 disk로 향하게 합니다.
동시에 또다른 receiver 에서는 로그들을 출력해 확인할 수 있습니다.
근본적으로, 발행된 로그 메세지들은 모든 receiver들로 전파될 것 입니다.
Exchanges
이전 파트에서는 우리는 큐로부터 메세지를 보내고 받았습니다.
이번엔 Rabbit에서 full message 모델을 소개합니다.
이전예제 에서 뭘했는지 빠르게 보자면
-producer는 메세지를 보내는 유저 어플리케이션 입니다.
-queue는 메세지를 저장하는 버퍼입니다.
-consumer는 메세지를 받는 유저 어플리케이션 입니다.
RabbitMQ에서의 MESSAGE MODEL의 핵심 아이디어는 PRODUCER가 메세지를 바로 큐로 보내지 않는다는 것 입니다.
사실,꽤 자주 PRODUCER는 어느 큐에 전달 될 지 조차 모릅니다.
대신,PRODUCER는 오직 EXCHANGE로 메세지를 보낼 수 있습니다.
EXCHANGE는 매우 간단합니다.
한 쪽에서 프로듀서로 부터 메세지를 받으면 다른 쪽으로는 QUEUE들로 메세지를 보냅니다.
EXCHANGE는 반드시 받은 메세지로 뭘 할 것인지를 알아야 합니다.
이것이 특정 큐로 덧붙여질지,이것이 많은 큐로 덧붙여질지,또는 받아서 폐기될 지
이러한 규칙이 EXCHANGE TYPE에 의해 정의됩니다.
여러 EXCHANGE TYPE이 가능합니다.:direct,topic,headers,fanout
우리는 이중 fanout에 집중 할 것 입니다.
channel.exchangeDeclare("logs","fanout");
fanout exchange는 매우 간단합니다.
이것은 모든 큐로 받은 메세지를 전달합니다.
Temporary queues
우리는 특정 이름을 가진 큐를 사용했습니다.
큐에 이름을 붙일 수 있는 것은 우리에게 중요했습니다.
우리는 같은 큐에 여러 worker를 가리키는 것이 필요했습니다.
큐에 이름을 붙이는 것은 producer와 consumer사이에 큐를 공유할 때 중요합니다.
그러나 우리의 logger 에서는 중요하지 않습니다.
우리는 모든 메세지들에 대해 듣고 싶습니다.
우리는 또한 예전의 것이 아닌 현재의 메세지 흐름에 대해 흥미가 있습니다.
이러한 것들을 해결하기위해 2가지가 필요합니다.
첫번째로,우리가 Rabbit에 연결 할 때 우리는 비어있는 큐가 필요합니다.
그러기 위해,우리는 랜덤한 이름의 큐를 만들어야 합니다.
두번째로,우리가 consumer의 연결을 해제하면 큐는 자동으로 삭제 되어야 합니다.
자바 클라이언트에서,파라미터가 없는 queueDeclare()를 사용하면
우리는 non-durable,exclusive,autodelete이며 만들어진 이름의 큐를 생성합니다.
Bindings
우리는 이미 fanout exchange와 queue를 만들었습니다.
우리는 exchange에 우리의 큐에 메세지를 보내기 위해 알려야 합니다.
그 관계를 binding이라 합니다.
'rabbitmq' 카테고리의 다른 글
rabbitmq tutotial - work queue (0) | 2024.01.26 |
---|---|
rabbitmq - ACCESS_REFUSED 에러 (0) | 2024.01.25 |
RabbitMQ란? (1) | 2024.01.25 |