DjangoQ与Django租户模式的集成包
django-tenant-schemas-q的Python项目详细描述
Django租户模式Q
Django-Tenant Schemas Q是Django-Q集群的一个定制实现,用于使用Django租户模式包在Django项目中实现多租户,Postgres作为数据库服务。使用这个包,开发人员可以将Django项目设置为多租户,并将Django-Q集群设置为按租户/模式工作。这个包可以与Django-ORM之外的任何其他代理一起工作。在
为什么需要这个包裹?在
尽管有包tenant schemas celery支持多租户的芹菜,但我对django-q项目非常感兴趣,并正在探索使django-q与django-q一起工作的可能性。在
安装
pip安装django-tenant-schemas-q
这应该安装django租户模式和django-q。在
如何设置?在
作为一名开发人员,我经常发现设置项目、包和正确配置有时是一项相对困难的工作。为了使这项工作顺利进行,只需遵循以下步骤。在
- 在
请参阅django_tenant_schemas所需的设置here
在 - 在
按照上述链接中的说明设置django_tenant_schemas。这将负责django_tenant_schemas的设置。在
在 - 在
将django_q添加到租户应用程序设置中。这将在每个租户迁移后设置任务、时间表等模型。在
在 - 在
接下来设置需要运行的Django-Q集群,以便处理任务并运行调度程序。在
在 - 在
在为集群设置配置时,将使用Django-Q支持的除Django ORM之外的任何其他代理。
在 - 在
最后,在设置文件中添加一个设置SCHEMAS_到“被调度程序排除在外”。此设置的值是要从计划程序中排除的架构列表,如果未指定,则默认情况下,计划程序将按名称public排除架构。在
在
这怎么办
假设您完全按照说明进行了操作,那么现在应该有如下设置
SHARED_APPS=['租户模式','包含'租户模式'的应用','需要的任何其他应用程序']
TENANT_APPS=['django_q','standard_django_APPS','any_other_APPS_needed']
已安装的_APPS=['tenant_schemas','app_containing_tenant_model','django_q','standard_django_APPS','any_other_app_needed']
租户模式='应用程序_名称.ModelName'
SCHEMAS\u TO_BE_EXCLUDED_BY_SCHEDULER=['public']
Q_CLUSTER={}#Q集群的配置
这些设置的作用很简单。它只需为每个模式创建Task&Schedule模型。Django-Q使用这些模块来存储任务和时间表。随着这些模型现在按模式/租户进行设置,事情变得更干净了。在
要运行集群,请使用命令python manage.py mscluster
一旦命令被触发,集群将启动并接受任务和计划。在
现在,考虑到调度是按照频率执行的任务,每个模式/租户都有它们,这是我想要实现的。这将使我能够配置不同时间的相同任务,系统将按预期工作。在
如何使用它
为了允许添加具有数据库模式意识的任务或计划,包中包含使其无缝的实用程序。在
将from django_tenant_schemas_q.utils import QUtilities
行添加到要添加task
或schedule
的行
要添加异步任务,可以使用
QUtilities.add_async_task(func_name_as_string, *args, **kwargs)
您可以添加sync=True
,以同步运行任务。在
要创建新计划,可以使用
^{pr2}$得到一个单一任务的结果
QUtilities.get_result(task_id, wait=0, cached=Conf.CACHED)
得到一组结果
QUtilities.get_result_group(group_id, failures=False, wait=0, count=None, cached=Conf.CACHED)
获取单个任务
QUtilities.fetch_task(task_id, wait=0, cached=Conf.CACHED)
获取一组任务
QUtilities.fetch_task_group(group_id, failures=True, wait=0, count=None, cached=Conf.CACHED)
获取组数
QUtilities.get_group_count(group_id, failures=False, cached=Conf.CACHED)
删除一组任务
QUtilities.delete_task_group(group_id, tasks=False, cached=Conf.CACHED)
从缓存中删除任务
QUtilities.delete_task_from_cache(task_id, broker=None)
获取队列的大小
QUtilities.get_queue_size(broker=None)
使用Iter添加多个异步任务
QUtilities.add_async_tasks_from_iter(func, args_iter, **kwargs)
为此,请使用来自django_tenant_schemas_q.custom
模块的Iter
。在
使用链创建任务链
QUtilities.create_async_tasks_chain(chain, group=None, cached=Conf.CACHED, sync=Conf.SYNC, broker=None)
为此,请使用来自django_tenant_schemas_q.custom
模块的Chain
。在
测试项目
存储库中有一个测试django项目。在
- 克隆存储库
- 运行
docker-compose -f test-compose.yml build
- 运行
docker-compose -f test-compose.yml up -d
- 运行
docker-compose -f test-compose.yml run backend python manage.py setupdata
- 运行
docker-compose -f test-compose.yml run backend python manage.py test --keepdb
这两个出色的包完全归功于Django-Q的作者https://github.com/Koed00和Django租户模式的https://github.com/bernardopires。在
- 项目
标签: