在 Django 中使用 pika 的 Rabbitmq 侦听器

Sou*_*Roy 7 django rabbitmq pika

我有一个 django 应用程序,我想使用来自 rabbit mq 的消息。我希望侦听器在我启动 django 服务器时开始消费。我正在使用 pika 库连接到 rabbitmq。证明一些代码示例真的会有所帮助。

Ale*_*hov 7

首先,您需要在 django 项目开始时以某种方式运行您的应用程序 https://docs.djangoproject.com/en/2.0/ref/applications/#django.apps.AppConfig.ready

def ready(self):
    if not settings.IS_ACCEPTANCE_TESTING and not settings.IS_UNITTESTING:
        consumer = AMQPConsuming()
        consumer.daemon = True
        consumer.start()
Run Code Online (Sandbox Code Playgroud)

进一步在任何方便的地方

import threading

import pika
from django.conf import settings


class AMQPConsuming(threading.Thread):
    def callback(self, ch, method, properties, body):
        # do something
        pass

    @staticmethod
    def _get_connection():
        parameters = pika.URLParameters(settings.RABBIT_URL)
        return pika.BlockingConnection(parameters)

    def run(self):
        connection = self._get_connection()
        channel = connection.channel()

        channel.queue_declare(queue='task_queue6')
        print('Hello world! :)')

        channel.basic_qos(prefetch_count=1)
        channel.basic_consume(self.callback, queue='queue')

        channel.start_consuming()
Run Code Online (Sandbox Code Playgroud)

这将有助于 http://www.rabbitmq.com/tutorials/tutorial-six-python.html

  • @SanjeevSiva,现在我意识到作为“生产就绪”解决方案,这是一个坏主意。一个好主意是像 celery 一样引发应用程序的第二个实例。例如: `./manage.py runserver # 在第一个终端中启动 http 服务器` 和 `./manage.py runco​​nsum # 在第二个终端中启动侦听器` (2认同)