* Отказоустойчивый брокер Flask - PullRequest
1 голос
/ 06 января 2020

У меня запущено приложение flask (0.10.1) и настроен сельдерей (3.1.25) вместе с ним следующим образом

tasks.py

from celery import Celery
broker_urls = [
    'amqp://my_user:passwd@rabbit-host-1:5672//',
    'amqp://my_user:passwd@rabbit-host-2:5672//',
    'amqp://my_user:passwd@rabbit-host-3:5672//',
]
celery = Celery('tasks', broker=broker_urls)
celery.conf.BROKER_FAILOVER_STRATEGY = "round-robin"

@celery.task
def add(x, y):
    return x + y

app.py

from gevent.wsgi import WSGIServer
from flask import Flask

app = Flask("testapp")
http_server = WSGIServer(('',8000), app)
http_server.serve_forever()


urls.py

from flask import Blueprint

api = Blueprint('api',__name__)

@api.route("/")
def index_api():
    add(10,20)

Я запускаю приложение как python app.py, Когда я запускаю приложение flask, если rabbit-host-1 не работает, оно выбирает следующего живого брокера rabbit-host-2 и работает нормально. Но если rabbit-host-1 не работает после того, как я запустил свое приложение, я думаю, что оно все еще подключено к rabbit-host-1 и все не работает, даже если rabbit-host-2 и rabbit-host-3 живы.

Но работник сельдерея смог немедленно переключаться при отказе любого из брокеров, используя заданную round-robin моду.

celery worker --app=tasks

Я что-то упустил для правильной настройки, что приводит к отказу при отказе работать flask?

...