python中celery使用redis当broker时,redis使用ssl的配置方式

777 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前置条件:

1.redis需要ssl连接,但是没有ssl证书。

2.celery版本在3.x以上

3.服务器环境为linux,arm系统

from celery import Celery
from flask import Flask
import ssl
app = Flask(__name__)
REDIS_PWD = ""
REDIS_HOST = ""
REDIS_PORT = ""
celery = Celery(app.import_name,
                broker=f'rediss://:{REDIS_PWD}@{REDIS_HOST}:{REDIS_PORT}/1',
                backend=f'rediss://:{REDIS_PWD}@{REDIS_HOST}:{REDIS_PORT}/2',
                accept_content=['pickle', ],
                timezone="Asia/Shanghai",
                broker_use_ssl={
                  'ssl_cert_reqs': ssl.CERT_NONE
                },
                redis_backend_use_ssl={
                    'ssl_cert_reqs': ssl.CERT_NONE
                    }
                )

我用的场景是无证书的,所以ssl_cert_reqs的值为ssl.CERT_NONE

如果有证书就需要设置额外值

参考网址:

docs.celeryq.dev/en/latest/u…

import ssl
 
broker_use_ssl = {
  'keyfile': '/var/ssl/private/worker-key.pem',
  'certfile': '/var/ssl/amqp-server-cert.pem',
  'ca_certs': '/var/ssl/myca.pem',
  'cert_reqs': ssl.CERT_REQUIRED
}

核心还是要设置redis_backend_use_ssl这个值

redis的连接方式也是需要加个s,即:rediss


CELERY_BROKER_URL = f'rediss://:{REDIS_PWD}@{REDIS_HOST}:{REDIS_PORT}/1'
CELERY_RESULT_BACKEND = f'rediss://:{REDIS_PWD}@{REDIS_HOST}:{REDIS_PORT}/2'