问题标签 [kombu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
celery - 芹菜节拍未启动 EOFError('输入用完')
一切正常,直到:
这是什么?
python - RabbitMQ:交换和绑定 HOW-TO
您能告诉我如何将消息从生产者传输到交换器,然后再传输到队列吗?
请注意,组合库不支持“强制”和“立即”。
在rabbit节点上,我定义了vhost,创建了默认的Exchanges,我还定义了“datastore”Exchange
并且还定义了vhost下的队列。
当我检查相应的队列时,我在队列中看不到任何消息,并且在执行上述代码时也没有出现异常。
你能告诉我如何调试它并就出了什么问题提出建议吗?
根据https://www.rabbitmq.com/tutorials/amqp-concepts.html: 当具有路由密钥 R 的新消息到达直接交换时,如果 K = R,则交换将其路由到队列
python - 如何在 Django 中使用 Kombu 和 celery 创建点击计数器
我正在尝试自定义本教程以在 Django 中使用 Kombu 和 Celery 创建点击计数器。本教程解释了如何为 url 做这件事,但我想做的是创建一个 Click 模型,将 Posts 定义为ForeignKey
字段,然后每次有人查看该帖子时,我都会为该帖子调用增量点击。
我有两个问题:第一个是我应该将函数调用放在视图中的什么位置,因为我使用的是通用视图(见下文)?第二个是我应该如何使用message
?我是否将对象写入传递给函数?
模型.py
消息传递.py
视图.py
python - RabbitMQ 心跳与连接耗尽事件超时
我有一个rabbitmq 服务器和一个使用kombu 的amqp 消费者(python)。
我已将我的应用程序安装在具有防火墙的系统中,该防火墙会在 1 小时后关闭空闲连接。
这是我的 amqp_consumer.py:
我想要的是,如果防火墙关闭了连接,那么我想重新连接。我应该使用心跳参数还是应该将超时参数(3600 秒)传递给drain_events()
函数?
两种选择有什么区别?(似乎也是如此)。
谢谢。
python - 为什么一个基本的 Celery 应用程序,什么都不做,需要 8 个打开的 Redis 连接?
试图更全面地了解 Celery/Kombu 和 Redis 如何在幕后交互以更好地项目扩展和设备成本(特别是在我希望尽可能最小的 Redis 设置和因此最少的连接的开发环境中)。
我未能在 Celery 或 Kombu 用户指南中找到我正在寻找的关于此主题的特定文档。
以下所有假设和问题都是基于我使用 Celery 应用程序运行的测试,没有任务(只是app = Celery("DatabaseWorker", broker=redis_uri)
),然后只是坐在那里什么都不做,并使用 redis-cli 工具(使用实时监控选项更新)。我启动了一个这种类型的工作人员并获得了 8 个打开的连接。
寻找我的错误假设的答案或更正:
为什么所有 8 个连接都保持打开状态?这是否与每个连接都来自池并因此永远不会关闭的事实有关?
如果它与池相关,那么为什么设置
/li>celeryconfig.py
如下值仍然会导致 8 个连接(这两个选项似乎都不起作用)两 (2) 个连接似乎与
celeryev
(用于监控工具)相关联。一种用于发布消息(发出PUBLISH
命令),一种用于订阅(PSUBSCRIBE
)。--without-hearbeat
我可以使用(以前不使用CELERY_SEND_EVENTS
配置变量)保存连接来关闭发布。我也可以阻止订阅连接吗?在我想要尽可能少的连接并且不关心监视杀死两者的开发环境中会很棒。四 (4) 个连接遵循此模式,它们检查是否存在某些队列/集合/键,然后在集合中设置一个值。但仍然没有关闭。为什么?例如:
/li>一 (1) 个连接似乎用于引导系统。设置与
/li>pidbox
当时发布相关的密钥。如果这只是为了让分布式系统知道有新的工作人员上线了?在 Redis 中为 Kombu 设置的密钥非常神秘,我很难找出它们的确切用途。我假设这些键/值是正在使用的实际消息队列,但是
/li>_kombu.binding.celery.pidbox
服务器的具体用途是什么,以及值的疯狂格式是什么?(我假设这_kombu.binding.celery
是默认任务队列,_kombu.binding.celeryev
是心跳消息的队列)一 (1) 个连接只是轮询队列和弹出元素,这对保持活动是有意义的,我明白为什么它永远不会关闭。但是这些队列名称是从哪里来的呢?它们似乎与上面使用 设置的名称不同
/li>SADD
。为什么他们的3个队列?
如果最终,一个工作人员只需要 8 个连接,因为所有这些都是必要的,那就这样吧。
python - Celery、kombu 和 django - 导入错误
我正在用 django 运行一个应用程序,我想用 celery 来做一些计划任务。
根据官方文档,在我的 settings.py 文件中,我设置了代理传输
并将 kombu.transport.django 添加到已安装的应用程序中
但是,当我尝试使用 同步数据库时,python manage.py syncdb
出现以下错误:
任何想法为什么我得到这个?我已经正确安装了 django,如果我kombu.transport.django
从已安装的应用程序中删除,应用程序运行良好。
编辑:这似乎是kombu的问题。我用pip install kombu
. 当我尝试导入文件“kombu.transport”时,我没有收到任何错误,但是当我尝试导入“kombu.transport.django”时,出现错误:
python - kombu 消费的消息消失了
我有这个代码:
在我运行之后consumer.consume()
- 我的a
变量仍然是一个空列表,但在 rabbitmq 队列中现在是空的,这意味着它们被消耗掉了。
进一步尝试将更多消息放入队列是毫无意义的,因为队列保持为空,就好像我没有连接或消息被直接消耗掉一样。
我做错了什么?
python - 使用教程无法使用 Django Celery Kombu
尝试让它工作:Django 1.6.11 + Celery 3.1.19 + Kombu 3.0.33 on Ubuntu 14.04 使用教程 http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html所以我从这里完全重复了项目结构: https ://github.com/celery/celery/tree/3.1/examples/django/
当我从 django 项目根目录运行命令时:/var/www/engine$ celery worker -l INFO -B
在我的应用程序vk_wall 中,我有带有添加任务的tasks.py文件。
我收到一个错误:
我看到 celery beat 问题,在回溯中我也看到 celery 可以找到 add、mul、get_wallposts_by_owner_id 任务,但无法执行它们(在我的views.py中我调用它们:from vk_wall.tasks import add, mul res_mul = mul.apply_async(( 2, 5), queue='celery', countdown=10) res_add = add.delay(2, 2))
我还安装了 django-celery 以在管理面板中查看任务。
顺便说一句:我能够在初学者教程http://docs.celeryproject.org/en/latest/getting-started/next-steps.html期间让 celery 工作和执行任务,但现在需要 django 来访问任务中的模型。
UPD:我的 settings.py django 文件
UPD2:我的celery.py文件(位于firstapp/firstapp,与django的settings.py同级)
UPD3:完整回溯
python - kombu.exceptions.EncodeError:[... 不是 JSON 可序列化的 - 仅在本地主机上
我正在使用 Django + Celery + Kombu + rabbitmq:我的任务在服务器上成功完成(Ubuntu 14.04)
但在具有相同设置的本地主机(Windows 7)上会引发错误:
所以任务标记为未完成,但实际上任务完成了我需要的所有事情。我查看了类似问题的答案:我的任务返回 dict 即 {'success':success}。看起来,它试图序列化作为 Django 模型实例的 Vkwallpost 对象,但是为什么。
我的设置.py: