Django RabbitMQ 消费者

ivi*_*ica 7 python django rabbitmq

我正在构建一个 Django 应用程序,多个外部应用程序将与该应用程序联系。Django 应用程序应该提供 UI 并使用从外部应用程序接收的数据填充数据库。

第一个想法是使用django_rest_framework,但这似乎创建一个紧密耦合的系统,因为每个外部应用程序都必须通过 REST 调用联系 Django 应用程序。

我的另一个想法最好用图片来描述:https://i.stack.imgur.com/dGgSg.jpg几个发布者会在 RabbitMQ 上创建消息,我的 Django 将使用这些消息并在数据库中创建适当的模型。

这样的事情可能吗?我已经pika为发布者和消费者使用了库中的异步示例,并且消息按预期流动。将 Django 混入其中会产生如下错误:

RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label  

django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Run Code Online (Sandbox Code Playgroud)

代码摘录:

# pika consumer
def on_message(self, unused_channel, basic_deliver, properties, body):
        # invoking view function
        from myapp.views import create_one_foo
        create_one_foo()
        self.acknowledge_message(basic_deliver.delivery_tag)

# views.py
from .models import Foo

def create_one_foo():
    foo = Foo()
    foo.bar = "bar"
    foo.save()
Run Code Online (Sandbox Code Playgroud)

dim*_*imm -1

看看 celery: http: //www.celeryproject.org这是一个帮助创建基于 RabbitMQ 的工作程序的框架

在 Django 应用所在的主机上运行 celery Worker 服务。如果您需要更改 Django DB 的状态,只需导入 Django 模型并由工作人员将数据放入数据库即可。否则,您可以在 Django 应用程序中运行 celery 工作程序。

  • 如果没记错的话。TS 希望 Django 使用来自rabbitmq 的数据,而 celery 的行为有所不同。celery 工作者将成为消费者,而我们的 Django 应用程序将成为生产者。 (3认同)