使用 Celery 的 AWS Redis 集群的正确方法

问题描述 投票:0回答:0

我在 AWS 中有一个 Redis 集群,我正在尝试将该 Redis 用作 Celery 的代理。 我的错误是:

ValueError: Couldn't import '<module_name>': Port could not be cast to integer value as '<redis_host>:6379'

这里是用法:

REDIS_ENDPOINT = config('REDIS_ENDPOINT')  # should be of the form 'hostname:port'
REDIS_HOST, REDIS_PORT = REDIS_ENDPOINT.split(':')
redis_url = f'redis://{REDIS_HOST}:{REDIS_PORT}'

app.conf.update(
    broker_url=redis_url,
    # worker_concurrency=1,
    worker_prefetch_multiplier=worker_prefetch_multiplier,
)

我真的不明白为什么它不起作用。 顺便说一句,不需要密码。 %100 确保 redis_host 的格式有效,因为另一个 Django 应用程序可以使用相同的技术轻松连接。

Django后端的工作用法:

REDIS_HOST, REDIS_PORT = REDIS_ENDPOINT.split(':')

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': f'redis://{REDIS_HOST}:{REDIS_PORT}/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        },
        'KEY_PREFIX': 'my_cache',
        'TIMEOUT': CACHE_TTL,  # Use the CACHE_TTL setting for cache timeout
    }
}

请不要忘记联系我!感谢您的帮助!

我还尝试在 python 中使用 redis-py-cluster 库:

REDIS_ENDPOINT = config('REDIS_ENDPOINT')  # should be of the form 'hostname:port'
REDIS_HOST, REDIS_PORT = REDIS_ENDPOINT.split(':')
redis_broker = Redis(host=REDIS_HOST, port=REDIS_PORT)
REDIS_NODES = [{"host": REDIS_HOST, "port": REDIS_PORT}]

app.conf.update(
    broker=redis_broker,
    # result_backend=result_backend,
    broker_url='redis://',
    broker_transport_options={
        'master_name': 'mymaster',
        'startup_nodes': REDIS_NODES
    },    # result_backend=result_backend,
    # worker_concurrency=1,
    worker_prefetch_multiplier=worker_prefetch_multiplier,
)

不工作。

我也只使用了 redis 库。并且也遇到了与尝试第一种方式时相同的错误。


REDIS_ENDPOINT = config('REDIS_ENDPOINT')  # should be of the form 'hostname:port'
REDIS_HOST, REDIS_PORT = REDIS_ENDPOINT.split(':')
result_backend = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'
broker_url = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'
redis_broker = Redis(host=REDIS_HOST, port=REDIS_PORT)

app.conf.update(
    broker=redis_broker,
    result_backend=result_backend,
    # result_backend=result_backend,
    # worker_concurrency=1,
    worker_prefetch_multiplier=worker_prefetch_multiplier,
)

python amazon-web-services redis celery
© www.soinside.com 2019 - 2024. All rights reserved.