我正在尝试使用云AMQP设置芹菜经纪人。
由于云AMQP服务仅提供Java SDK,因此我用Python重写了加密代码,并且连接正常。
但是,有一个问题生产者发送任务:在我的项目启动一段时间后,与云AMQP服务的连接将无效,因为Celery amqp生产者/连接无法刷新连接参数。错误为530 Time Expired
。这表示密码无效
这是我的芹菜配置:
task_ignore_result=True,
task_default_queue='default',
task_default_exchange='default',
result_exchange='default',
task_default_exchange_type='direct',
broker_login_method='PLAIN',
task_create_missing_queues=True,
task_serializer='json',
result_serializer='json',
result_expire=1,
accept_content=['json'],
broker_connection_retry=False,
task_queues=(
Queue(name='tesu', exchange=Exchange(name='test', type='direct'), routing_key='test'),
),
task_routes=(
{'tasks.add': {
'queue': 'test_lukou',
'routing_key': 'test_lukou'
}},
),
broker_url='amqp://{username}:{password}@{host}:{port}/{virtual_host}'.format(username=provider.get_user_name(),
password=provider.get_password(),
host=PUBLIC_HOST,
port=PORT,
virtual_host=VHOST_NAME),
broker_pool_limit=0,
broker_heartbeat=10,
broker_connection_timeout=30,
result_backend=None,
event_queue_expires=60,
worker_prefetch_multiplier=1,
我在发送任务时更新了broker_url,但是amqp连接参数未更新。
环境:
Python 2.7
kombu 4.0.2
celery 4.1.0
rabbitmq 0.2.0
Celery是否提供一种在运行时更新amqp连接参数的方法?
谁能给我建议?在此先感谢。
一些链接:
Celery creating a new connection for each task
https://www.cloudamqp.com/docs/celery.html
添加:
调试结果
amqp connection password(never changed)
celery updated conf
答案 0 :(得分:0)
喜欢
通过为每个任务创建新的生产者池来设置Celery amqp,如下所示:
class TestAMQP(AMQP):
@property
def producer_pool(self):
self._producer_pool = pools.producers[
self.app.connection_for_write()]
self._producer_pool.limit = self.app.pool.limit
return self._producer_pool
app = Celery('test', include=['tasks'], amqp=TestAMQP)
希望这可以帮助陷入类似问题的人。