메세지 지향 미들웨어는 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어입니다.
그리고 메세지를 전달하는 관정에서 보관하거나 라우팅 및 변환 할 수 있다는 장점이 있습니다.
메세지의 백업 기능을 유지함으로써 지속성을 제공해서 송수신 측은 동시에 네트워크 연결을 유지할 필요가 없다.→ 보관
미들웨어 계층 자신이 직접 메세지 라우팅을 수행하기 때문에, 하나의 메세지를 여러 수신자에게 배포가 가능하다 →라우팅
송수신 측의 요구에 따라 전달하는 메세지를 변환 할 수 있다. →변환
고로 메세지 큐는 메세지 지향 미들웨어에 속한다.
메세지 큐는 Queue의 자료구조로 메세지 전달하는 시스템이며 메세지 지향 미들웨어(MOM)을 구현한 시스템이다.
메세지를 발행하고 전달하는 부분은 Priducer, 메세지를 받아서 소비하는 부분은 Consumer이라 부르고, 메세지 큐는 Producer와 Consumer의 메세지 전달 역할 하는 매개체다.
여기서 MSA에서 아키텍처의 핵심적인 역할도 한다고 한다.
그리고, 데이터를 운반하는 방식에 따라 메세지 브로커, 이벤트 브로커로 나눌수 있습니다.
메세지 브로커는 Producer가 생산한 메세지를 메세지 큐에 저장하고, 저장된 메세지를 Consumer 가 가져갈 수 있도록 한다.
이 친구 또한 기본적으로 메세지 브로커 역할을 할수 있습니다, 그런데 메세지 브로커는 이벤트 브로커 기능을 하지 못한다.
이벤트 브로커가 관리하는 데이터를 이벤트라고 부르며, 이벤트 브로커 방식은 Consumer가 소비한 데이터를 필요한 경우 다시 소비할 수 있다.
또한 메세지 브로커 보다 대용량 데이터를 처리할 수 있다.
→ ex) Kafka
이렇게 있는데 설명하자면
동기 방식은 직접적으로 메세지를 보내는것이라서 전달이 끝나야 다음 메세지를 보내는 형식이다.
그래서 속도가 빠르지만 대용량 트래픽 발생하는 서버엔 비효율적이다.
비동기는 중간에 메세지큐를 배치해서 Producer가 메세지를 Queue에 넣어서 처리하고 Consumer는 비동기적으로 메시지를 처리할 수 있는 것입니다.
애플리케이션 끼리의 결합도를 낮출수 있습니다.
만약 높으면 장점이 있지만, 확장성,유연성,유지보수,등등 결합도가 낮을때 얻을수 있는 장점이 많습니다.
→ 여기선 MAS 아키텍쳐의 핵심 특징
탄력성이란 시스템이 예기치 않은 상황 또는 장애에 대응하고 유연하게 대처하는 능력을 의미합니다.
예를 들면 A→B로 송신 하는데 B가 처리할수 없는 상태가 되버리면 A는 송신 처리를 못하는데 메세지 큐가 있다면, 메세지 큐에 A가 전달해서 처리하고 메세지를 송신한것을 B가 장애 해결할때까지 큐에 보관해서 보내면 끝이다.
그래서 A는 영향을 받지 않는다.
정리하면 Producer 프로세스는 Consumer 프로세스가 장애를 일으켜도 메세지를 정상 처리하고 반대로 Consumer도 Producer가 장애를 일으켜도 정상적으로 수신할수 있다.
과잉이란 정상적인 메세지를 송수신이 실패하는경우 재실행이 가능하다.
작업을 메세지로 메세지 큐에 넣어두면 일정 장애 기간동안 송신된 메세지는 큐에 남아있어 추후 장애 복구 시 정상적으로 재시도 및 복구가 가능합니다.
송신된 메세지를 안전하고 확실한 전달을 의미합니다.
장애가 발생하더라도 확실하게 Consumer가 수신할수 있는것.
수평확장을 의미합니다.
기존 메시지 큐를 이용한 통신에서 부하가 증가하거나 클라이언트의 동시다발적인 요청이 증가할 때, 메시지 큐에 Producer,Consumer만 추가해서 간단하게 확장할수 잇다.
https://velog.io/@ch4570/Stomp-Kafka를-이용한-채팅-기능-개발하기-with-Spring-Boot-1-Kafka와-Stomp는-무엇일까참고자료