래빗MQ 메시지 발행 성능절충

1.
래빗MQ에는 메시지 발행에 대한 여러 설정이 있다.
메시지 발행속도는 배달 보장 메커니즘을 사용하면 느려진다.
추가적인 배달 보장없이 메시지를 발행하면 속도는 훨씬 빠르지만 안전하지 못하다.

아래와 같은 설정들을 할수 있다.

- 배달보장 없음
  : 걍 빠르다.

- 실패통보
  : 메시지의 mandatory 플래그를 true로 전달.
   래빗MQ는 라우팅 못하면 basic.return RPC를 통해 메시지를 발행자에게 다시 보냄.
   (성공하면 안보냄)
   basic.return은 비동기로 동작하고, 처리하도록 설정해야 한다.
   보통 콜백 메소드 등록해야 할 것이다.

- 발행자 확인
  : 래빗MQ는 basic.ack(성공) or basic.nack(실패)를 리턴한다.
    보통 비동기적으로 응답하는 콜백 핸들러를 전달해야 한다.

- 대체 익스체인지
  : 라우팅할 수 없으는 메시지를 dead letter queue에 저장.
    익스체인지 선언시 대체 익스체인지 명시.

- 트랜잭션
  : 메시지 전달 보장하는 방법 (발행자 확인 구현전에는 이게 유일한 방법이었다고 함)
    브로커의 큐에 메시지를 성공적으로 전달했음을 basic.return으로 응답.
    tx.select, tx.selectok, tx.commitok, tx.rollback 이런 것들이 사용된다.
    (걍 발행자 확인을 쓰는 것이 권장된다.)

- HA 큐
  : 큐에 있는 동안 손실되지 않도록 하는 것.
    큐를 여러서버에 중복해 복사본을 저장하는 기능
    HA 큐로 메시지가 발행되면 HA 큐를 담당하는 클러스터의 각 서버로 메시지 동기화.
    메시지를 소비하면 다른 노드의 모든 메시지 복사본이 제거됨

- 트랜잭션 HA 큐
  : HA큐에 트랜잭션, 발행자 확인을 사용하는 경우 HA 큐의 모든 활성 노드에 메시지가 동기화 된 것이 확인될 때까지 성공 응답을 보내지 않음. 응답 지연될 수 있다. 쫄보의 세팅.

- 메시지를 디스크에 저장
  : 배달 보장하는 방법으로 디스크에 저장.
    메지지 속성의 delivery-mode를 2로 하자. 1(메모리)가 기본이다.

출처 : rabbitmq in depth 4장 (도서)

댓글

이 블로그의 인기 게시물

래빗MQ 클러스터링 - 2. 네트워크 파티션

래빗MQ 메시지 딜리버리 확인 메커니즘 - 소비자에서 브로커로

래빗MQ 클러스터링 - 1. 클러스터링