본문 바로가기
MessageQueue/RabbitMQ

Rabbit MQ

by 아이티.파머 2019. 3. 31.
반응형

2019/03/31 - [MessageQueue/RabbitMQ] - Rabbit MQ

2019/03/31 - [MessageQueue/RabbitMQ] - RabbitMQ 설치 (Centos 6/7)

2021/01/19 - [MessageQueue/RabbitMQ] - Rabbit MQ 사용자 추가 명령어

2021/01/19 - [MessageQueue/RabbitMQ] - Rabbit MQ WebConsole

Rabbit MQ

특징

  • AMQP 구현 (Advanced Message Queing Protocol) UISO 표준 프로토콜
  • 비동기 처리를 위한 메세지 큐 브로커
  • 분산 처리에 대한 고려 (설정 편의)
  • 고가용성 보장
  • 다양한 플러그인 지원
  • 웹 콘솔 지원

메세지 처리 프로세스

Types of Exchanges(https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html)

Exchange, Binding , Queue

1. Producer > rabbitMQ 의 Exchange 에 메세지 전송

  • RabbitMQ의 중요 원칙중 하나는 Producer 가 어떠한 메시지도 Queue에 직접 보낼수 없도록 설계 되어 있다.
  • 프로듀셔는 오직 Exchange에만 메세지를 보낼수 있는 것이다.

2. Exchange > Binding을 통한 Queue 삽입

  • Binding은 Exchage 와 Queue 의 관계를 정의한 것으로 라우팅과 같은 개념이며, Queue는 메세지가 저장되는 버퍼 이다.

3. Consumer

  • 컨수머는 자신이 바라보고 있는 Queue 를 리스닝 하다가 큐가 삽입 되었을때 메세지를 수신 하여 처리한다.

주요 용어

  • Producer (생상자)

메세지를 생성하여 보내는 역할

  • Publish

    Producer 가 메세지를 보냄

  • Queue

    메세지를 저장 하는 버퍼

    큐는 Exchange 에 의해 Binding 된다.

    큐는 호스트 server의 메모리 및 디스크 제한에 구속된다.

  • Consumer

    메세지를 받아 처리

    동일 큐를 바라보는 컨슈머는 라운드로빈 방식에 의해 자동으로 분배 된다.

  • Subscribe

    Consumer 가 메세지를 수신하기 위해 큐를 실시간으로 리스닝 하고 있는 역할

  • Exchange

    Exchage type에 따라 동작 하며,     roducer 가 전달한 메세지를 Queue에 삽입 하는 역할

  • Exchange Type

    fanout 알려진 모든 Queue에 메세지를 전달     direct 지정된 routingKey를 가진 Queue에만 메세지 전달     topic 지정된 패턴 현태에 일치하는 큐에만 메세지 전달

    com.event.#(여러단어)

    com.event.*(한단어)

  • header

    헤더에 포함된 key = value 의 일치 조건에 따라 메세지 전달

  • Bindings

    Exchange 로 Queue 에 연결(삽입, 꺼냄)해주는 기능

  • routing

    Exchange 가 Queue에 메세지를 전달하는 과정

  • routing Key

    Exchange 로  Queue 에  Binding 될때 라우팅 키가 일치 하는지 판단하여 메세지를 전달할지 판단한다.

메시지 수신통보

많은 프로토콜이 메세지 전달 보장을 위해 ACK(nowledgement)  개넘 을 사용하며,  메시지 응답 을 보내주도록 되어 있다.ack를 전송하지 않고 Consumer 가 오류가나거나 죽으면 (TCP 연결이 끊어지는 경우) RabbitMQ는 메세지가 완전히 처리도지 않았음을 인식하고  다시 대기 시킨다. 메세지 시간 초과가 없다.

메시지 내구성

  • RabbitMQ 서버가 중지되면 작업 손실이 생길수 있다.
  • 손실되지 않도록 RabbitMQ는 기능을 제공하고 있다.
  • Queue 생성시 durable 을 true로 생성, MessageProperties.PERSISTENT_TEXT_PLAIN

참고

메세지 내구성이 durabel을 ture로 생성한다고 하여 완벽하게 지원하는것은 아니다. 메세지가 손실되지 않는다고 완전하게 보장 할순 없다. 보다 강력한 보증이 필요한 경우엔 게시자 확인을 통해  가능하다

 

 

반응형

'MessageQueue > RabbitMQ' 카테고리의 다른 글

Rabbit MQ WebConsole  (0) 2021.01.19
Rabbit MQ 사용자 추가 명령어  (0) 2021.01.19
RabbitMQ 설치 (Centos 6/7)  (0) 2019.03.31