2013-06-24 6 views
2

AMQP를 안정성 패턴으로 사용하고 있습니다. 사용 사례는 메시지를 대기열에 넣은 다음 소비하고 웹 서비스에 삽입하는 것입니다. 내 웹 서비스가 느리고 대기열에 메시지가 많아서 소비자가 내 데이터베이스를 죽이지 않도록하고 싶습니다.RabbitMQ를 사용하여 AMQP 소비자를 조절하십시오.

RabbitMQ에서 시간 기반 (분당 X 메시지/초당/시간) 또는 다른 메커니즘을 사용하여 조절을 수행하는 기본 제공 방법이 있습니까?

+0

channel.flow 관련 댓글 : 버전 3.3.0에서 더 이상 사용되지 않습니다. http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3- 3/ – hveiga

답변

2

흐름 제어가 있으므로 메시지가 너무 많으면 게시자가 기다리고 있습니다. RabbitMQ 매우 안정적인 시스템입니다, 나는 당신이 그것에 대해 걱정할 수 있다고 말할 수 있습니다.

소비를 제한하는 방법에 대해 이야기하고 있다면 아마도 혼자서 신경 써야 할 것입니다. channel.flow (더 이상 사용되지 않음 : RabbitMQ 3.3.0) 및 basic.qos 방법을 보거나 서비스가로드를 수행 할 수있을 때 일시적으로 소비자 연결을 끊고 다시 연결할 수도 있습니다.

UPD 난 당신이 basic.consume과 메시지를 사용하는 것이 좋습니다 및 웹 서비스를 공급할 수 있습니다. 웹 서비스 프로세스 페이로드가 얼마나 오래되었는지에 따라로드가 같고 어떤 종류의 sleep(N)을 수행 할 수 있습니다. 귀하의 고객이 자고있는 동안 아무것도 소비하지 않으므로 어떠한 웹 서비스도 제공되지 않습니다.

+0

브로커 백업을 걱정하지 않아도됩니다. AMQP 커넥터로 한 번에 모든 메시지를 가져올 수 있다면 너무 많은 연결로 웹 서비스에 과부하가 발생할 것을 걱정합니다. – Nicholas

+0

앱을 작성하는 데 사용하는 언어는 무엇입니까? – pinepain

+0

Java. 나는 이것을 위해 내 자신의 논리를 쓰지 않기를 바랬는데, RabbitMQ/AMQP에는 뭔가가 내장되어있을 수 있습니다. – Nicholas

0

"연결 별 흐름 제어"가 channel.flow()과 관련이 있는지 궁금합니다.

기본적으로 channel.flow(false);으로 전화를 걸어 브로커에게 메시지 보내는 것을 알릴 수 있습니다.
channel.flow(true);을 호출하면 흐름이 다시 활성화됩니다. 여기에 javadoc이 있습니다.

관련 문제