RabbitMQ 정리

j_6367·2022년 8월 13일
0

exchange

publish용. aws sns와 같은 역할

바인딩 된 queue로 메시지를 전송

선언 (declare)

exchange 생성

  • type
    • direct
      routing key와 일치하는 큐에 전송
    • topic
      routing key와 패턴 일치하는 큐에 전송
    • headers
      routing key 무시하고 header 일치하는 큐에 전송
    • fanout
      바인딩된 큐 전체에 전송
  • passive
    true인 경우 미리 선언했을 경우 새로 생성하지 않음
  • durable
    true: 디스크에 저장, false: 메모리 저장(transient)
  • autoDelete
    consumer가 없으면 자동 삭제됨

전송(publish)

메시지 게시

  • mandatory
    true인 경우 하나 이상의 queue가 메시지 받아야 성공

Queue

메시지 대기열

선언(declare)

큐 생성

  • exclusive
    true인 경우 혼자만 사용함. 해당 subscriber 종료시 큐 삭제됨
  • durable
    true: 디스크에 저장, false: 메모리 저장(transient)
  • autoDelete
    모든 소비자 연결 끊기면 자동 삭제됨
  • arguments
    • x-dead-letter-exchange : {exchange}
      nack 호출시 설정한 exchange로 전송
    • max-lenght, message-ttl 등 다양한 값 있음

소비(consume)

큐 메시지 수신

  • content
    메시지 내용
  • properties
    메시지 정보
    • timestamp
    • reply-to
    • 기타 정해진 값들 있음, 전송할 때 미설정시 모두 null
  • ack, nack
    • 성공, 실패
    • nack(true)로 해서 다시 큐에 담을 수 있음
      ( 다시 받은 큐메시지는 redeliveryed = true )

고성능, 고가용성 최적화

  1. 대기열 짧게 유지

    대기열이 길면 RAM 사용 많아짐, 성능 저하

  2. connection/channel 재사용

    연결시 핸드셰이크 과정 복잡함

  3. connection/channel 수 낮게 유지

    하나의 프로세스당 하나의 커넥션, 스레드당 하나의 채널이 이상적

  4. publish/consume 커넥션 분리

    게시용, 소비용 분리

  5. 스레드 간 채널 공유하지 않음

    스레드 세이프 하지 않음

  6. 프리페치값 설정

    메모리부족, 충돌 문제 해결

  7. 지연대기열 사용 (고가용성)

    속도는 느려지지만 RAM 사용량 최소화

  8. 수동 ack 비활성화 (고성능)

    성능 향상

0개의 댓글