복붙노트

[PYTHON] Pika의 대기열 크기 가져 오기 (AMQP Python)

PYTHON

Pika의 대기열 크기 가져 오기 (AMQP Python)

간단한 질문이지만 Google이나 Pika 오픈 소스 코드는 도움이되지 않았습니다. Pika의 현재 대기열 크기 (항목 카운터)를 쿼리하는 방법이 있습니까?

해결법

  1. ==============================

    1.AMQP 프로토콜에서 대기열 크기를 가져 오는 두 가지 방법이 있습니다. Queue.Declare 또는 Basic.Get을 사용할 수 있습니다.

    AMQP 프로토콜에서 대기열 크기를 가져 오는 두 가지 방법이 있습니다. Queue.Declare 또는 Basic.Get을 사용할 수 있습니다.

    Basic.Consume을 사용하여 도착할 때 메시지를 소비하는 경우 연결을 끊고 (시간 초과) 다시 큐에 넣거나 그렇지 않으면 한 메시지 만 가져 오지만 확인하지 않으면이 정보를 얻을 수 없습니다. 최신 버전의 AMQP에서는 메시지를 재구성 할 수 있습니다.

    Pika에 관해서는 구체적 내용을 모르지만 AMQP 용 Python 클라이언트는 내 편이 가시였습니다. 필요한 정보를 얻거나 대기열 사용자가 시간 초과를 허용하여 레코드 통계와 같은 주기적 간격으로 다른 작업을 수행하거나 대기열에있는 메시지 수를 파악할 수 있도록 클래스를 monkeypatch해야하는 경우가 종종 있습니다.

    이 문제를 해결할 또 다른 방법은 포기하고 Pipe 클래스를 사용하여 sudo rabbitmqctl list_queues -p my_vhost를 실행하는 것입니다. 그런 다음 출력을 구문 분석하여 모든 대기열의 크기를 찾습니다. 이 경우 / etc / sudoers를 구성하여 보통의 sudo 암호를 묻지 않아야합니다.

    나는 Pika가 더 많은 경험을 가진 다른 누군가가 내가 언급 한 모든 것을 어떻게 할 수 있는지 지적함으로써 이것을 대답한다. 나는 Pika를 다운로드하고 타이어를 차기 시작할 것이다. 그러나 그런 일이 일어나지 않고 Pika 코드를 monkeypatching하는 데 어려움을 겪고 있다면, haigha를 살펴보십시오. 나는 그들의 코드가 AMQP 프로토콜에 더 가까이 있기 때문에 다른 Python AMQP 클라이언트 라이브러리보다 훨씬 간단하다는 것을 알았다.

  2. ==============================

    2.나는이 질문이 약간 오래된 것을 알고 있지만 여기 pika로 이것을하는 예가있다.

    나는이 질문이 약간 오래된 것을 알고 있지만 여기 pika로 이것을하는 예가있다.

    AMQP 및 RabbitMQ에 대해서는 이미 큐를 선언 한 경우 패시브 플래그가 설정된 큐를 다시 선언하고 다른 모든 큐 매개 변수는 동일하게 유지할 수 있습니다. 이 선언에 대한 응답 declare-ok에는 대기열에있는 메시지 수가 포함됩니다.

    다음은 pika 0.9.5의 예입니다.

    import pika
    
    def on_callback(msg):
        print msg
    
    params = pika.ConnectionParameters(
            host='localhost',
            port=5672,
            credentials=pika.credentials.PlainCredentials('guest', 'guest'),
        )
    
    # Open a connection to RabbitMQ on localhost using all default parameters
    connection = pika.BlockingConnection(parameters=params)
    
    # Open the channel
    channel = connection.channel()
    
    # Declare the queue
    channel.queue_declare(
            callback=on_callback,
            queue="test",
            durable=True,
            exclusive=False,
            auto_delete=False
        )
    
    # ...
    
    # Re-declare the queue with passive flag
    res = channel.queue_declare(
            callback=on_callback,
            queue="test",
            durable=True,
            exclusive=False,
            auto_delete=False,
            passive=True
        )
    print 'Messages in queue %d' % res.method.message_count
    

    이렇게하면 다음이 인쇄됩니다.

    <Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
    <Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
    Messages in queue 0
    

    message_count 멤버에서 메시지 수를 얻습니다.

  3. ==============================

    3.pika를 사용하여 대기열 길이를 얻는 방법은 다음과 같습니다 (로컬 호스트에서 기본 사용자와 암호를 사용하는 경우) q_name을 대기열 이름으로 대체하십시오.

    pika를 사용하여 대기열 길이를 얻는 방법은 다음과 같습니다 (로컬 호스트에서 기본 사용자와 암호를 사용하는 경우) q_name을 대기열 이름으로 대체하십시오.

    import pika
    connection = pika.BlockingConnection()
    channel = connection.channel()
    q = channel.queue_declare(q_name)
    q_len = q.method.message_count
    
  4. ==============================

    4.PyRabbit을 사용해 보셨습니까? 그것은 당신이 찾고있는 것처럼 들리는 get_queue_depth () 메쏘드를 가지고 있습니다.

    PyRabbit을 사용해 보셨습니까? 그것은 당신이 찾고있는 것처럼 들리는 get_queue_depth () 메쏘드를 가지고 있습니다.

  5. from https://stackoverflow.com/questions/8192584/get-queue-size-in-pika-amqp-python by cc-by-sa and MIT license