pub/sub, producer/consumer 차이
안녕하세요
두 개념의 차이점이 궁금한데요
pub/sub 은 특정 topic으로 메세지를 발행하면 해당 topic을
구독중인 여러 구독자들에게 전달될 수 있고
producer/consumer는 메세지를 큐에 발행하면 큐에 저장된 메세지는 한명의 소비자에게만 전달 될 수 있는 건가요?
그러면 rabbitmq는 producer/consumer 이고
websocket은 pub/sub 인가요?
Câu trả lời 2
0
안녕하세요.
두개의 차이점중 가장 큰 부분은 하나의 메시지를 하나의 컨슈머가 처리하느냐, 여러 컨슈머가 처리하느냐로 판단하시면 될거 같습니다.
Publish/Subscribe 패턴은 브로드캐스트 용도로 Fanout, Topic 익스체인지로 연결된 모든 큐에 메시지가 복제되서 전달이 되는것이고 Producer/Consumer 패턴은 하나의 큐를 하나의 컨슈머가(Direct) 처리 하는 방식입니다.
즉, 다수의 서비스가 동일한 메시지를 필요로 하면 pub/sub을, 하나의 메시지를 하나의 컨슈머가 처리하고 로드밸런싱을 통해 분배를 할 경우 producer/consumer 라고 보시면 되고 websocket은 프로토콜이나, 굳이 구조로 나누자면 pub/sub 방식이라고 보시면 되겠습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. hoonseung님.
질문해주신 pub/sub과 producer/consumer 패턴은 메시지 전달 방식에서 중요한 개념들입니다.
Pub/Sub(발행/구독) 패턴:
- 이 패턴에서는 여러 발행자(Publisher)가 특정 주제(Topic)에 메시지를 게시하면, 그 주제를 구독한 모든 수신자(Subscribers)들에게 메시지가 전달됩니다. 쉽게 말해, 방송국이 특정 채널로 시그널을 보내고, 그 채널을 보고 있는 모든 사람들이 동시에 그 방송을 시청하는 것과 비슷합니다.
- 사용 예: WebSocket은 이러한 발행/구독 모델을 쉽게 구현할 수 있는 프로토콜 중 하나입니다. WebSocket을 사용하면 서버에서 클라이언트로 실시간 메시지를 발행할 수 있으므로, 여러 클라이언트가 동시에 메시지를 수신할 수 있습니다.
- 이 패턴에서는 여러 발행자(Publisher)가 특정 주제(Topic)에 메시지를 게시하면, 그 주제를 구독한 모든 수신자(Subscribers)들에게 메시지가 전달됩니다. 쉽게 말해, 방송국이 특정 채널로 시그널을 보내고, 그 채널을 보고 있는 모든 사람들이 동시에 그 방송을 시청하는 것과 비슷합니다.
Producer/Consumer 패턴:
- 이 패턴에서는 하나의 큐가 있고, 여러 생산자(Producer)가 메시지를 큐에 넣으며, 소비자(Consumer)는 큐에서 메시지를 가져와 처리합니다. 일반적으로 한 메시지는 한 생소비자에 의해서만 처리된다는 특징이 있습니다. 이는 메시지의 중복 처리를 방지하기 위한 구조입니다.
- 사용 예: RabbitMQ는 이 패턴을 기반으로 동작하며, 메시지 큐를 사용하여 여러 고객이 동시에 처리할 수 있는 비동기 작업 처리를 돕습니다. 큐에 들어간 메시지는 한 소비자에게만 전달되며, 이로 인해 메시지의 독점적 소비가 가능합니다.
- 이 패턴에서는 하나의 큐가 있고, 여러 생산자(Producer)가 메시지를 큐에 넣으며, 소비자(Consumer)는 큐에서 메시지를 가져와 처리합니다. 일반적으로 한 메시지는 한 생소비자에 의해서만 처리된다는 특징이 있습니다. 이는 메시지의 중복 처리를 방지하기 위한 구조입니다.
따라서, RabbitMQ는 주로 Producer/Consumer 패턴을 구현하는 데 사용되고, WebSocket은 Pub/Sub 모델을 구현하는 데 강점을 가지고 있습니다. 하지만 RabbitMQ에서도 다양한 교환기(Exchange)를 사용하여 Pub/Sub 전송 방식을 일부 구현할 수 있습니다.
이 내용을 바탕으로 좀 더 정보를 얻고 싶다면, 다음의 관련 질문을 참고하시기 바랍니다:
- “MSA 환경에서 브로드캐스트는 어떻게 이루어지나요?” 질문과 답변
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
16 강의 메세지 retryCount의 의도
0
12
1
step 4 - fanout 관련 질문
0
67
2
dlx dlq 설정 관련
0
64
1
동적 큐 이름 설정 방법 및 SimpleRabbitListenerContainerFactory의 재정의에 따른 Retry 설정 미적용 관련 질문입니다.
0
95
1
강의 자료 관련
0
83
2
인증 에러
0
80
2
RabbitMQ에서의 트랙잭션 메시징 질문
0
109
2
Producer/Consumer 단위
0
71
2
안녕하세요 섹션2. 12번 강의에서 질문 있습니다.
0
82
2
안녕하세요 "섹션2 8. Consumer간 작업 분배" 에서 질문 있습니다.
0
88
2
컨슈머 서버 질문드립니다
0
79
2
DLQ 관련 질문
0
130
2
알림은 왜 pub sub 구조로 설계하나요?
0
148
2
Receiver를 여러개 하려면 어떻게하나요?
0
139
2
깃허브 step11 브랜치
0
97
1
DLQ 재시도 로직 처리후 DLQ에 unacked 1건이 남는거에 대해서
0
149
2
NotificationMessage가 필요한 이유 질문
0
107
2
스탭4 질문드립니다
0
150
3
생성자 질문드립니다
0
105
2
Pub/Sub & WebSocket 활용한 실시간 알림
0
211
2
채팅 방식 질문입니다!
0
138
2
강의와 살짝 무관하지만.. MQ에 대한 질문이 있습니다!
0
207
1
챕터18 retry yml 강의 부분 질문
0
186
2
tutorial-step4 질문
0
143
2

