rabbitmq python 예제

Comments 0 by
August 2, 2019

수동 메시지 승인은 기본적으로 켜져 있습니다. 이전 예제에서는 auto_ack=True 플래그를 통해 명시적으로 해제했습니다. 작업을 완료하면 이 플래그를 제거하고 작업자에게 적절한 승인을 보낼 차례입니다. 이러한 종류의 실수를 디버깅하기 위해 rabbitmqctl을 사용하여 messages_un승인 필드를 인쇄할 수 있습니다. 예를 들어 amq.gen-JzTY20BRgKO-HjmUJj0wLg처럼 보일 수 있습니다. pika.adapters.asyncio_연결과 같은 비차단 연결 어댑터를 사용하는 경우. 비동기 연결 또는 피카. SelectConnection에서는 기본 비동기 프레임워크의 기본 API를 사용하여 다른 스레드에서 I/O 루프 바인딩콜백을 요청합니다. 예를 들어, 피카.

SelectConnection의 I/O 루프는 add_callback_threadsafe(), pika.adapters.tornado_연결을 제공합니다. 토네이도커넥의 I/O 루프에는 추가_콜백()이 있으며 pika.adapters.asyncio_연결. 비동기 연결의 I/O 루프는 call_soon_threadsafe()를 노출합니다. 예제를 성공적으로 사용하려면 실행 중인 RabbitMQ 서버가 필요합니다. 따라서 위의 예제를 사용하여 각 큐에 대한 소비자를 지정할 수 있습니다. 다시마에는 Exchange 클래스가 있습니다. 우리는 “예제 교환”이라는 직접 교환을 만들 것입니다 : 디스패치가 여전히 우리가 원하는대로 작동하지 않는 것으로 나타났습니다. 예를 들어 두 명의 작업자가 있는 상황에서 모든 이상한 메시지가 무겁고 메시지도 가볍을 때 한 작업자는 끊임없이 바쁘고 다른 작업자는 거의 모든 작업을 수행하지 않습니다. 글쎄, RabbitMQ는 그것에 대해 아무것도 알지 못하며 여전히 메시지를 균등하게 디스패치합니다. 명령줄에서 임의의 메시지를 보낼 수 있도록 이전 예제에서 send.py 코드를 약간 수정합니다.

이 프로그램은 작업 대기열에 작업을 예약하므로 new_task.py: pika의 이름을 지정해 보겠습니다. 차단연결 어댑터 예외 처리를 사용하여 연결 오류를 확인할 수 있습니다. 다음은 puka가 비동기적으로 작동할 수 있지만, 이 예제에서는 puka가 동기 라이브러리로 사용됩니다. 즉, 각 요청 (약속) puka 후 다음 단계로 이동 하기 전에 실행 될 때까지 기다립니다. 메시지를 보낼 큐를 만들어야 합니다. 생산자는 메시지를 보내기 위해 큐가 필요하지 않지만 이 예제에 대해 큐를 만듭니다. 다시마에는 이에 대한 Queue 클래스가 있습니다. 큐의 이름, 교환 및 큐가 교환에 바인딩될 라우팅 키를 지정해야 합니다. 그런 다음 rabbitmqctl을 사용하여 큐가 비어 있는지 확인할 수 있습니다.

이전 코드에서 이미 선언한 u2012로 큐를 다시 선언하는 이유를 물어볼 수 있습니다. 큐가 이미 있다고 확신하는 경우 이를 피할 수 있습니다. 예를 들어 send.py 프로그램이 이전에 실행된 경우입니다. 그러나 어떤 프로그램을 먼저 실행할지 아직 확실하지 않습니다. 이러한 경우 두 프로그램에서 큐선언을 반복하는 것이 좋습니다. rabbitmqctl list_bindings를 사용하면 코드가 실제로 바인딩 및 큐를 원하는 대로 만드는지 확인할 수 있습니다. 두 개의 receive_logs.py 프로그램을 실행 하면 다음과 같은 것을 볼 수 있습니다. 이름 없는 교환은 큐 이름이 작동해야 하므로 단일 큐에만 메시지를 전달할 수 있습니다.

이 예제는 예제/consume_recover.py에서 찾을 수 있습니다. 이 명령은 그 자체로 정확하지만 설정에서 작동하지 않습니다. 이는 내구성이 없는 hello라는 큐를 이미 정의했기 때문입니다. RabbitMQ는 다른 매개 변수로 기존 큐를 재정의할 수 없으며 이를 시도하는 모든 프로그램에 오류를 반환합니다. 그러나 간단한 해결 방법이 있습니다 – 예를 들어 task_queue와 같은 다른 이름의 큐를 선언해 보겠습니다: 이 텍스트의 주요 목표는 간단한 예제를 사용하여 기본 메시징 개념을 도입하는 것이었습니다.