V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
piaochen0
V2EX  ›  Python

Django 项目如何订阅消费 MQ 的消息?

  •  
  •   piaochen0 · 2021-10-19 09:52:23 +08:00 · 2708 次点击
    这是一个创建于 1142 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前项目是基于 Django 的,
    现在接到一个需求,需要从 RocketMQ 中取消息,然后根据取到的消息处理数据入数据库。

    现在打算在 django 启动初始化的时候,例如 settings 的__init__.py 中,
    使用 PushConsumer 订阅 RocketMQ 中的主题,绑定一个回调的方法。
    这样就不关闭这个连接了。 这样做会不会有什么弊端和问题?

    之前考虑过单独像 celery 那样搞一个单独的进程来启动监听,
    但是感觉这样太麻烦了,
    就想直接在 Django 项目初始化的时候,启动订阅。

    麻烦各位赐教。

    3 条回复    2021-10-19 16:16:34 +08:00
    676529483
        1
    676529483  
       2021-10-19 09:57:25 +08:00
    我觉得看你怎么启动 django 吧
    wsgi 模型启动,因为有多个 worker,最好还是走 celery 这样单独的进程;
    asgi 启动,就像 lz 说的注册回调就行,注意处理断连的问题
    encro
        2
    encro  
       2021-10-19 10:01:15 +08:00
    自定义 django 命令行,启动 worker,然后将 worker 使用 supervisord 运行,是标配吧。
    neoblackcap
        3
    neoblackcap  
       2021-10-19 16:16:34 +08:00
    wsgi 模型不支持你这玩,你要这样玩,其实是要求 wsgi server 支持进程管理。uwsgi 可以帮到你。也许 asgi 也可以做到,不过得看你的代码,如果按 wsgi 模式写的同步代码,建议上 uwsgi 解决这个订阅问题就算了。事实上相当于两个独立进程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.