问题标签 [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.
python - 区分 celery、kombu、PyAMQP 和 RabbitMQ/ironMQ
我想将图像上传到 S3 服务器,但在上传之前我想生成 3 种不同大小的缩略图,并且我希望它在请求/响应周期之外完成,因此我使用的是 celery。我已经阅读了文档,这是我所理解的。如果我错了,请纠正我。
- Celery 可帮助您在请求响应周期之外管理任务队列。
- 然后有一个叫做胡萝卜/kombu 的东西——它是一个 django 中间件,用于打包通过 celery 创建的任务。
- 然后是促进胡萝卜与代理通信的第三层 PyAMQP。例如。RabbitMQ、AmazonSQS、ironMQ 等。
- 经纪人位于不同的服务器上,为您做事。
现在我的理解是 - 如果多个用户同时上传图片,celery 将排队调整大小,并且调整大小实际上会发生在 ironMQ 服务器上,因为它在 heroku 上提供了一个很酷的插件。
现在的疑惑:
但是在调整图像大小后,ironMQ会将其推送到S3服务器,还是会在该过程完成后通知..我不清楚。
芹菜和昆布/胡萝卜有什么区别,你能生动地解释一下吗?
python - Kombu 以非阻塞方式
我正在寻找一种在 tornado-sockjs 和 Django 应用程序服务器之间使用 kombu 作为 MQ 适配器的方法。我做了类似的事情:
但是龙卷风在 _handle_loop 执行时被阻止(如预期的那样)。
有什么办法可以防止这种情况发生吗?
我知道 Tornado 的 Pika 库适配器,但我想使用 kombu,因为它已经在项目中使用并且具有灵活的传输。
更新:
将 _handle_loop 更改为生成器函数
redis - Celery 未连接到 Redis 代理:与代理的连接丢失
我正试图让 Redis 作为我在 Django 上安装的 Celery 3.0.19 的代理。我看到 redis-server 正在端口 6379 上运行。当我运行一个简单的 Celery 测试时,我得到以下堆栈跟踪:
python - Kombu - 消息发布到 rabbitmq 错误 - TypeError: 'str' object is not callable
我想首先说我不仅是 python 的新手,而且是一般的编程新手。考虑到这一点,这是我的问题。我正在尝试将一些数据发送到我的 Rabbitmq 服务器。下面是我的 Python 代码。json_data 只是一个保存一些 json 格式数据的变量。
这会产生以下错误:
Traceback (most recent call last):
File "test.py", line 43, in <module>
producer = Producer(channel, exchange = "test_exchange", serializer="json")
File "/Library/Python/2.7/site-packages/kombu/messaging.py", line 83, in __init__
self.revive(self._channel)
File "/Library/Python/2.7/site-packages/kombu/messaging.py", line 210, in revive
self.exchange = self.exchange(channel)
TypeError: 'str' object is not callable
任何帮助,将不胜感激。谢谢。
django - Django celery、kombu transport 和多个工人
用于 Celery 的 Django ORM 传输的文档说,使用多个工人可能会导致一些任务被多次执行。
http://docs.celeryproject.org/en/latest/getting-started/brokers/django.html
谁能量化“多于几个”的含义?具体来说,我有两台服务器,想运行两个芹菜工人。我想知道是否有人可以告诉我,如果有两个工人会使我面临某些任务将执行多次的风险。
celery - Celery:访问代理连接池
我将 Celery 与 AMQP 代理一起使用来调用任务,但响应需要使用与 Celery 使用的不同的队列架构传回,因此我只想使用 Kombu 将消息传回。我已经能够做到这一点,但我每次都在创建一个新的连接。Celery 是否使用代理连接池,如果是,您如何访问它?
python - 如何使用 Kombu 指定 AMQP correlationId?
该文档publish
建议根据 AMQP 规范将额外的 AMQP 属性作为关键字参数传递给as,但correlationId="foo"
似乎没有达到预期的效果。
python - 用 Kombu 重试发布消息的最佳方法是什么?
我正在测试kombu是如何工作的。我计划在几个项目中更换鼠兔。我看到kombu 有很多文档,但是使用我在文档中找到的一些消息会丢失。这是代码:
当它发布时,我关闭了几次连接并继续发布,但在队列中大约有 60000 条消息,所以有很多丢失的消息。
我尝试了不同的选择,例如:
谢谢!
python - Kombu-python - 强制阻塞/同步行为(或仅在前一个完成时处理消息)
我让Kombu处理 rabbitmq 队列并调用 django 函数/管理命令等。我的问题是我对正确的执行顺序有绝对要求。在 message1 和 2 的处理程序完成之前,消息 3 的处理程序永远无法运行。在完成处理前一条消息之前,我需要确保 Kombu 不处理另一条消息:
考虑这个基类
有没有办法强制kombu进行这种行为?我不在乎锁是否会在处理完成之前不会耗尽另一个事件process_message
,或者在前一个事件完成之前不会运行另一个事件,或者任何其他方法来实现这一点。我只需要确保严格维护执行顺序。
我会很高兴在这方面有任何帮助。
python - 芹菜路由到多个任务而不是主机
我正在将我从 Golang(使用 redis)编写的应用程序移植到 Python,我很想使用 Celery 来完成我的任务队列,但是我有一个关于路由的问题......
我的应用程序通过 REST POST 接收“事件”,其中每个“事件”可以是不同的类型。然后我想让后台工作人员等待某些类型的事件。这里需要注意的是,一个事件可能导致处理该事件的任务不止一个。例如:
一些/lib/a/tasks.py
一些/lib/b/tasks.py
总而言之......我希望能够运行 N 数量的工人(跨 X 台机器)并且这些作品中的每一个都将注册 Y 数量的任务,例如:a.handle_event_typeA、b.handle_event_typeA 等。 . 并且我希望能够将任务插入队列并让一名工作人员拿起任务并将其路由到工作人员中的多个任务(即到 a.handle_event_typeA 和 b.handle_event_typeA)。
我在这里阅读了 Kombu 的文档和这里的 Celery 的路由文档,但我似乎无法弄清楚如何正确配置它。
一段时间以来,我一直在使用 Celery 进行更传统的工作流程,我对它的功能集、性能和稳定性感到非常满意。我会直接使用 Kombu 或一些自制解决方案来实现我需要的东西,但如果可能的话,我想使用 Celery。
多谢你们!我希望我不会在这个问题上浪费任何人的时间。
编辑 1
在考虑了这个问题一段时间后,我想出了一个解决方法来实现我想要的 Celery。这不是最优雅的解决方案,但效果很好。我正在使用 django,它是缓存抽象(您可以直接使用 memcached 或 redis 之类的东西)。这是我想出的片段:
然后我要做的是通过执行以下操作来订阅不同模块中的任务:
然后我可以在处理 REST 事件时调用发布任务方法。