이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 26359|회답: 2

RabbitMQ 메시지 응답 메커니즘에 대한 심층 분석

[링크 복사]
게시됨 2018. 3. 30. 오전 10:42:59 | | | |


소비자가 메시지를 받고 처리 작업이 완료되면, 이 메시지 식별자를 가진 ack을 보내 메시지가 수신되었고 처리가 완료되었음을 서버에 알립니다. RabbitMQ는 메시지를 처리하는 소비자의 링크가 끊길 때까지 메시지가 제대로 처리되지 않았다고 판단하기 전에 메시지를 재전송합니다.
메시지 확인 응답은 기본적으로 꺼져 있습니다. Consumer를 초기화할 때 noAck 파라미터가 있습니다.true로 설정하면 소비자는 메시지를 받자마자 ACK를 반환합니다


일반적으로 일반적으로 사용되는 시나리오 노크는 true로 설정되지만, 지불과 같이 고위험 요구가 있는 프로젝트에 해당합니다. 모든 메시지에 대해서는 그 무결성과 정확성을 보장해야 합니다. 메시지를 받은 후에는 올바른 비즈니스 로직이 실행되었는지 확인한 후, 서버에 ACK를 적극적으로 반환해야 합니다. 대기열에 있는 메시지는 rabbitmqctl list_queues 이름 message_rady message_unacknowleded 명령어나 백그라운드 관리 인터페이스를 통해 확인할 수 있습니다.

noAck이 false로 설정되어 있다면, 클라이언트는 서버에 ACK를 적극적으로 보내야 하며, 클라이언트가 메시지를 확인하지 않으면 다음과 같은 상황이 발생합니다:



프로그램이 계속 실행 중인 한, 이 10개의 메시지는 래그가 붙지 않은 상태로 남아 RabbitMQ로 다시 전달할 수 없습니다. 더 강력한 것은RabbitMQ 메시지 소비에는 타임아웃 메커니즘이 없습니다즉, 프로그램이 재시작되지 않으면 메시지는 항상 언래킹 상태에 머무릅니다. 운영 이벤트 작업을 할 때 이 비고정 상태 메시지를 잊지 마세요.

준비됐어

이 상태를 가진 메시지는 처리될 대기열에 존재합니다.

미확인

이 상태의 메시지는 이미 처리 중이지만 확인되지 않음을 나타냅니다.




프로그램이 닫히면(소비자가 닫혀 있는 한) 이 10개의 메시지는 다시 준비 상태로 돌아갑니다.


확인 메시지

클라이언트가 서버에 ACK를 보내면 어떻게 되나요? 즉, 메시지 수신 여부를 확인하는 것인가요? 코드는 다음과 같습니다:


BasicAck 메서드의 두 번째 매개변수인 multiple이 false로 설정되면, RabbitMQ는 현재 메시지가 확인되었다는 알림을 받았음을 의미합니다.만약 참이라면, 첫 번째 매개변수가 지정한 전달 태그보다 작은 추가 메시지가 인정됩니다。 (대량 확인은 채널 전체에 해당합니다)

확인 취소

분산 프로그램의 클라이언트 중 하나가 예외를 가지고 메시지 확인을 취소하고 다른 클라이언트가 메시지를 처리하도록 하려 한다면 어떻게 해야 할까요?

소비 메시지에 예외가 있으면 확인을 취소해야 하며, 그 후 Channel의 basicReject 메서드를 사용할 수 있습니다.

첫 번째 매개변수는 전달 태그를 지정하고, 두 번째 매개변수는 이 실패 메시지를 처리하는 방법을 설명합니다.true의 값은 메시지가 다시 큐 헤더에 들어가는 것을, false 값은 메시지가 포기되었음을 의미합니다




이전의:직접 DNS 서버를 설정하는 방법을 알려드릴 수 있습니다!
다음:바이두 지도에서 도시 좌표를 얻을 수 있습니다
게시됨 2021. 9. 22. 오후 8:49:04 |
배우기 시작해...
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com