Metroid - Django的Metro
项目描述

Metroid
订阅、行动、发布。
Metroid - Django的Metro
此应用程序旨在通过以下方式简化所有Django+Celery用户的Metro集成:
- 使用一个命令异步处理订阅和消息
- 根据在
settings.py
中定义的主题执行Celery任务 - 当使用
MetroidTask
基类时,通过您的管理仪表板重试失败的任务
概述
python
>= 3.10django
>= 4.2 - 用于asgiref
和设置django-guid
>= 3.2.0 - 在数据库中存储失败任务的相关ID,使调试变得容易- 选择一个
celery
>= 5.3.0 - 根据主题执行任务django-rq
>= 2.4.1 - 根据主题执行任务
实现
该 python manage.py metroid
应用程序完全异步,没有任何阻塞代码。它使用 Celery
来执行任务。
它的工作原理是
- 遍历所有配置的订阅并为每个订阅启动一个新的异步连接
- Metro 在订阅上发送消息
- 此应用程序将过滤出与您定义的主题匹配的消息,并将一个 Celery 任务排队以执行该主题指定的函数
3.1. 如果没有找到该主题的任务,则将消息标记为完成 - Celery 任务成功排队后,消息将被标记为完成
- 如果任务失败,将在您的数据库中自动创建一个条目
- 所有失败的任务都可以通过管理员仪表板手动重试
配置和安装此软件包
注意 有关完整示例,请参阅
demoproj/settings.py
。
- 在
settings.py
中创建一个包含所有订阅和处理程序的METROID
键。示例设置
METROID = {
'subscriptions': [
{
'topic_name': 'metro-demo',
'subscription_name': 'sub-metrodemo-metrodemoerfett',
'connection_string': config('CONNECTION_STRING_METRO_DEMO', None),
'handlers': [
{
'subject': 'MetroDemo/Type/GeekJokes',
'regex': False,
'handler_function': 'demoproj.demoapp.services.my_func'
}
],
},
],
'worker_type': 'celery', # default
}
通过提供作为字符串的完整点路径来定义 handler_function
。例如,from demoproj.demoapp.services import my_func
作为 'demoproj.demoapp.services.my_func'
提供。
处理程序的主题可以是正则表达式或字符串。如果提供了正则表达式,则必须将变量 regex 设置为 True。示例
'handlers': [{'subject': r'^MetroDemo/Type/.*$','regex':True,'handler_function': my_func}],
- 通过将应用程序添加到您的已安装应用程序、中间件并按照此处所述配置日志记录来配置
Django-GUID
。确保您启用了CeleryIntegration
from django_guid.integrations import CeleryIntegration
DJANGO_GUID = {
'INTEGRATIONS': [
CeleryIntegration(
use_django_logging=True,
log_parent=True,
)
],
}
创建您自己的处理程序函数
您的函数将使用以下关键字参数调用
message
、topic_name
、subscription_name
和 subject
。换句话说,您的函数应该看起来像这样
Celery
@app.task(base=MetroidTask)
def my_func(*, message: dict, topic_name: str, subscription_name: str, subject: str) -> None:
rq
def my_func(*, message: dict, topic_name: str, subscription_name: str, subject: str) -> None:
运行项目
- 确保 Redis 正在运行
docker-compose up
- 运行迁移
python manage.py migrate
- 创建一个管理员账户
python manage.py createsuperuser
- 启动一个工作进程
celery -A demoproj worker -l info
- 运行订阅者
python manage.py metroid
- 向 Metro 发送消息。示例代码可以在
demoproj/demoapp/services.py
中找到 - 运行 web 服务器
python manage.py runserver 8000
- 在
http://localhost:8080/admin
下查看失败的消息
要贡献,请参阅 CONTRIBUTING.md
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源分布
metroid-1.4.0.tar.gz (15.0 kB 查看散列)
构建分布
metroid-1.4.0-py3-none-any.whl (18.1 kB 查看散列)