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

보기: 23648|회답: 0

RabbitMQ BasicQos 소비자 병렬 처리 한계

[링크 복사]
게시됨 2018. 4. 10. 오후 10:36:02 | | | |


우선, Rabbitmq 서버에 100개의 처리되지 않은 메시지가 있고, 무작위로 소비자 클라이언트를 열면 다음과 같은 상황이 나타납니다.

100개의 데이터가 한순간에 모두 전송되는데, 단일 클라이언트로 동시에 이렇게 많은 데이터를 처리할 수 없습니다. 어떻게 해야 할까요?




위 사진에서 보시다시피, 저희는 메시지 수신 사실을 확인하지 않았습니다! 생산자가 계속 보내면, 우리 소비자들도 계속 받을 수 있을 거야!

상상해 보세요, 만약 우리 단일 소비자가 1분에 최대 60개의 메시지를 처리할 수 있다면, 생산자는 1분에 300개의 메시지를 보낼 수 있습니다.저희는 1분 동안 동시에 300개의 메시지를 받아야 하는 소비자 클라이언트가 있는데, 이 속도가 최대 부하를 초과해 서버 자원이 고갈되고 소비자 클라이언트가 멈출 수 있습니다
RabbitMQ는 QoS(품질 서비스) 기능을 제공합니다, 즉 메시지의 비자동 확인 전제 하에서, 일정 수의 메시지(소비 또는 채널에 따라 Qos 값을 설정함)가 확인되지 않으면 새로운 메시지가 소비되지 않는다.



프리페치사이즈:0
prefetchCount: RabbitMQ에 한 소비자에게 한 소비자에게 N개 이상의 메시지를 동시에 푸시하지 말라고 지시합니다. 즉, 아직 ack이 되지 않은 N개의 메시지가 있으면 Consumer 사용자가 ack이 있을 때까지 차단합니다
global:true/false 위 설정들이 채널에 적용되는지, 간단히 말해 위의 제한이 채널 수준인지 소비자 수준인지 여부
참고: prefetchSize와 global은 rabbitmq에서 구현되지 않는다고 하니, 당분간 공부하지 않겠습니다


prefetch_count no_ask=거짓일 때 적용됩니다즉, 자동 응답의 경우 이 두 값은 다음과 같습니다효력 없음

BasicQos 메서드를 통해 prefetchCount = 3을 설정하세요. 이로 인해 RabbitMQ는 소비자당 최대 3개의 메시지를 동시에 처리할 수 있습니다. 즉, ACK를 받기 전까지는 소비자에게 새로운 메시지를 배포하지 않습니다. 설정하는 방법은 다음과 같습니다:





그림에서 볼 수 있듯이, 두 명의 소비자가 동시에 큐를 듣고 있지만, 이 메시지는 한 소비자가 소비할 때만 자동으로 인식되며, 다른 소비자는 다시 이 메시지를 받지 못합니다.

공식 웹사이트 소개: http://www.rabbitmq.com/consumer-prefetch.html

이 방법은 대기열이 가득 찰 수 있음을 유의하세요. 물론, 더 많은 Consumer를 추가하거나 더 많은 virtualHost를 만들어 디자인을 다듬어야 할 수도 있습니다.





이전의:EF는 대량 데이터베이스 삽입, 업데이트 및 삭제를 구현합니다
다음:IIS Express 웹 서버가 시작될 수 없었다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com