celery broker 连接参数简单说明
简单了解celery broker 连接参数的配置以及内部处理可以有助于更好的使用celery 以及开发自己的broker 支持
一个参考broker配置
- redis
redis://:password@hostname:port/db_number
- 自定义broker
app = Celery(
__name__,
broker_url="filesystem://",
broker_transport_options={
"data_folder_in": path,
"data_folder_out": path,
},
imports=("tasks",),
)
参考配置
celery/app/base.py 内部对于connection的处理,实际使用的是kombu 的amqp 包装(一个amqp多底层支持适配)
def _connection(self, url, userid=None, password=None,
virtual_host=None, port=None, ssl=None,
connect_timeout=None, transport=None,
transport_options=None, heartbeat=None,
login_method=None, failover_strategy=None, **kwargs):
conf = self.conf
return self.amqp.Connection(
url,
userid or conf.broker_user,
password or conf.broker_password,
virtual_host or conf.broker_vhost,
port or conf.broker_port,
transport=transport or conf.broker_transport,
ssl=self.either('broker_use_ssl', ssl),
heartbeat=heartbeat,
login_method=login_method or conf.broker_login_method,
failover_strategy=(
failover_strategy or conf.broker_failover_strategy
),
# 参数可以通过broker_transport_options 参数以及其他自定义参数处理,实际调用的是kombu 的amqp 内部connection 处理
transport_options=dict(
conf.broker_transport_options, **transport_options or {}
),
connect_timeout=self.either(
'broker_connection_timeout', connect_timeout
),
)
默认amqp 实现是celery.app.amqp:AMQP,里边包装了不少基于kombu 的amqp 操作,可以方便基于amqp 协议的任务处理,比如消息发送,任务路由,具体的详细包含的方法操作可以查看源码
说明
以上是一个简单说明,实际不少celery的功能通过阅读可以更好的理解是如何集成的,时间允许还是推荐阅读源码
参考资料
https://github.com/celery/celery/blob/5b86b35c81ea5a1fbfd439861f4fee6813148d16/celery/app/events.py
https://github.com/celery/celery/blob/706024358f0277f4fe716ae8a9a50a0f38eac64e/celery/app/amqp.py
https://github.com/celery/celery/blob/fa5d7ff09c93516c9d5712351f56db3d22876395/celery/app/base.py
https://github.com/celery/kombu/blob/5a88a28f31ab958072910d6f40f022296bea720c/kombu/connection.py
浙公网安备 33010602011771号