首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Flower选项卡中不支持‘’broker

在Flower选项卡中不支持‘’broker
EN

Stack Overflow用户
提问于 2019-09-10 13:59:32
回答 1查看 1.3K关注 0票数 2

我们使用Flower监控芹菜任务,在我们的项目中使用Redis作为代理。

当我们使用SSL作为代理配置Redis时,我们可以在broker选项卡中看到下一条消息:

不支持‘'redis’代理

我们试图(并成功地)通过下一个URL从芹菜连接到Redis:

代码语言:javascript
复制
rediss://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB_NAME}?{SSL_OPTIONS}

正如芹菜文档中所示。

同时,我们尝试了--broker--broker_api参数,结果是相同的。

工作人员和任务工作正常(在工作人员内部,代理正常显示),但是broker选项卡是空的。

如果我们查看芹菜代码,我们可以发现芹菜如何管理url解析来将Redis的ssl选项和配置设置为代理:

代码语言:javascript
复制
        if scheme == 'redis':
            # If connparams or query string contain ssl params, raise error
            if (any(key in connparams for key in ssl_param_keys) or
                    any(key in query for key in ssl_param_keys)):
                raise ValueError(E_REDIS_SSL_PARAMS_AND_SCHEME_MISMATCH)

        if scheme == 'rediss':
            connparams['connection_class'] = redis.SSLConnection
            # The following parameters, if present in the URL, are encoded. We
            # must add the decoded values to connparams.
            for ssl_setting in ssl_param_keys:
                ssl_val = query.pop(ssl_setting, None)
                if ssl_val:
                    connparams[ssl_setting] = unquote(ssl_val)

如果我们查看Flower代码,就会发现Flower如何管理url解析以设置代理:

代码语言:javascript
复制
        class Broker(object):
            def __new__(cls, broker_url, *args, **kwargs):
                 scheme = urlparse(broker_url).scheme
                 if scheme == 'amqp':
                     return RabbitMQ(broker_url, *args, **kwargs)
                 elif scheme == 'redis':
                     return Redis(broker_url, *args, **kwargs)
                 elif scheme == 'redis+socket':
                     return RedisSocket(broker_url, *args, **kwargs)
                 else:
                     raise NotImplementedError

正如我们所看到的,Flower似乎不支持使用SSL的Redis (只支持redis,而不是rediss)。

这是真的吗?有没有任何方法可以与Redis连接,在芹菜和花卉中使用rediss,或者使用SSL与Redis连接,而不使用rediss?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-10-23 07:29:39

它适用于下面的URL选项。

证书的百分比编码路径或正常路径都可以工作。

rediss和redis计划都有效。

使用Celery==4.4.7,flower==0.9.5

代码语言:javascript
复制
export SSL_CACERT_PATH="%2Fvar%2Fssl%2Fmyca.pem"
export SSL_CLIENT_CERT_PATH="%2Fvar%2Fssl%2Fclient-cert.pem"
export SSL_CLIENT_KEY_PATH="%2Fvar%2Fssl%2Fprivate%2Fworker-key.pem"
OR 
export SSL_CACERT_PATH=/var/ssl/myca.pem
export SSL_CLIENT_CERT_PATH=/var/ssl/client-cert.pem
export SSL_CLIENT_KEY_PATH=/var/ssl/private/worker-key.pem

#Ensure no whitespaces if breaking lines
export REDISS_BROKER_URL="rediss://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}?\
ssl_cert_reqs=required\
&ssl_ca_certs=${SSL_CACERT_PATH}\
&ssl_certfile=${SSL_CLIENT_CERT_PATH}\
&ssl_keyfile=${SSL_CLIENT_KEY_PATH}"

flower -b $REDISS_BROKER_URL

#Ensure no whitespaces if breaking lines
export REDIS_BROKER_URL="redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}?\
ssl_cert_reqs=required\
&ssl_ca_certs=${SSL_CACERT_PATH}\
&ssl_certfile=${SSL_CLIENT_CERT_PATH}\
&ssl_keyfile=${SSL_CLIENT_KEY_PATH}"

flower -b $REDIS_BROKER_URL
[I 201023 07:20:09 command:140] Visit me at http://localhost:5555
[I 201023 07:20:09 command:145] Broker: redis://:**@xxxx:xxxx//
[I 201023 07:20:09 command:148] Registered tasks:
    ['celery.accumulate',
     'celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap']
[I 201023 07:20:10 mixins:229] Connected to redis://:**@xxxx:xxxx//
^C^C
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57872448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档