[Spring + MQ] WebSocket + RabbitMQ를 활용하여 실시간 채팅 구현하기
·
Spring
들어가며인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 를 완강했다! 짝짝짝 🎉비동기 아키텍처 찍먹하기에 좋은 강의였다. 이제 추가로 전에 잠깐 다뤘던 실시간 채팅, 그리고 TCC(Try-Confirm/Cancel), RabbitMQ 클러스터와 페더레이션을 간단하게라도 학습하고 구현해보고자 한다. 뒤의 두 가지는 쉽지 않을 것 같아서… 오늘은 우선 실시간 채팅 기능을 구현해 보려고 한다. 강의에서 간단하게 채팅 형태의 무언가?를 구현했는데, 너무 간단해서 이번 기회에 한 번 구현해 보면 좋을 것 같았다! 이번에 구현한 것도 DB 연동은 하지 않은 간단한 채팅이긴 하다ㅎㅎ WebSocket + RabbitMQ를 활용하여 실시간 채팅 구현하기RabbitMQ 설정@Beanpublic Qu..
[Spring + MQ] RabbitMQ의 트랜잭션, Publisher Confirm을 이용한 트랜잭션 처리
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. 트랜잭션Message Queue에서 트랜잭션은 메시지 처리 작업이 전부 성공적으로 완료되거나 실패 시 모두 원상복구 되도록 보장하는 메커니즘이다. 트랜잭션 종류프로듀서 트랜잭션메시지를 MQ에 전송하기 전 트랜잭션 시작메시지를 Queue에 전송한 후 성공 시 트랜잭션 커밋 or 실패 시 롤백실패 시 메시지가 Queue에 producing 되지 않음단, 속도 문제가 있으며 비동기라는 특징에 부합하지 않음컨슈머 트랜잭션컨슈머가 메시지를 수신한 후에 트랜잭션이 시작성공 시, 메시지를 처리한 뒤 커밋실패 시, ..
[Spring + MQ] Dead Letter Queue와 RetryTemplate을 활용한 메시지 재처리
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. DLQ (Dead Letter Queue)메시지가 Queue에서 제대로 처리되지 못할 경우 DLQ로 이동되며, 실패한 메시지를 저장하는 용도로 사용된다.NACK 처리나 거부basic.reject 혹은 basic.nack 으로 메시지가 처리되지 못한 경우TTL (Time-To-Live) 만료메시지 TTL이 초과된 경우Queue 설정 초과 (Overflow)Queue에 설정된 최대 메시지 개수를 초과하면 가장 오래된 메시지가 삭제되고 DLQ로 이동 DLX (Dead Letter Exchange)Queue에..
[Spring + MQ] Routing Model을 이용한 Log 수집
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. Routing 모델이란?메시지를 Routing Key에 따라 특정 Queuee에 전달하는 모델이다.Direct Exchange와 Topic Exchange 모두에서 사용 가능하다. Direct Exchange Topic Exchange 라우팅 키 매칭 방식정확히 일치패턴 기반 (* 와 # 지원)특징매칭에 제한이 있음매우 유연(다양한 패턴 매칭)사용 사례단순 명확한 목적의 라우팅복잡하고 동적인 라우팅 Exchange에 대한 자세한 설명은 아래 포스팅에서 다루고 있다.https://starmk.tist..
[Spring + MQ] WebSocket과 Pub/Sub을 통한 실시간 웹 알림 구현하기
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. Publish / Subscribe 모델Pub/Sub은 메시지 발행 (publish)과 구독 (subscribe)의 개념을 기반으로 하는 메시징 패턴이다. 메시지 송신자 (publisher)가 메시지를 특정한 주제 (topic)로 발행 (publish)하면, 해당 주제를 구독 (subscribe)하고 있는 여러 수신자 (subscriber)들이 메시지를 수신(receive)한다.RabbitMQ에서 Fanout Exchange는 연결된 모든 Queue에 메시지를 브로드캐스트하므로, 여러 Queue를 Bi..
[Spring + MQ] 여러 Consumer에게 메시지 분산 처리하기
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. 경쟁 소비자 패턴 (Competing Consumers Pattern)메시지를 여러 Consumer (소비자) 간에 분배하여 작업을 분산 처리하는 구조이다.작업 부하를 효율적으로 분산하고, 병렬 처리를 가능하게 만들어 처리 속도를 향상시킨다. 메시지 분배 방식으로는 Round-Robin 방식과 Fair Dispatch 방식이 있다.Round-Robin 방식: 메시지를 순서대로 각 Consumer에게 고르게 분배Fair Dispatch 방식: 메시지 수동 확인 (Manual Acknowledgement)..
[Spring + MQ] RabbitMQ의 기본 비동기 메시지 전송
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. 단순 메시지 전송 (Producer to Consumer)메시지 발행자 (Producer)가 큐에 메시지를 전달하면 소비자 (Consumer)는 큐에 들어온 메시지를 소진한다. 1. 서버 실행rabbitmq가 설치된 위치에서 sbin 하위의 rabbitmq-server.bat을 실행한다. 2. 유저 및 VHost 추가VHost와 권한의 역할VHost (가상 호스트)는 RabbitMQ에서 사용자를 격리하는 기본 단위로, 다음과 같은 역할을 한다.리소스 격리VHost는 Queue, Exchange, Bin..
[MQ] RabbitMQ란?
·
Spring
※ 이 글은 인프런 RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기 강의를 들으면서 학습한 내용을 정리한 글입니다. 일부 내용을 인용하였으며, 문제가 될 시 인용 부분을 수정 또는 삭제하겠습니다. AMQP란?Advanced Message Queuing Protocol의 약자로, MQ의 오픈소스에 기반한 표준 프로토콜을 의미한다. AMQP 특징네트워크 상으로 전송되는 명령어들의 표준화AMQP 명세를 따르는 모든 Broker들은 똑같은 방식으로 동작메시지 수신, 라우팅, 큐 관리, 메시지 전달 보장의 기능을 수행서로 다른 언어, 플랫폼 간에도 동일한 방식으로 메시지를 주고받을 수 있음다양한 언어별 클라이언트 라이브러리를 제공Java, Python, Ruby, .NET 등 RabbitMQ란?AMQP..