У меня запущено приложение 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?