https://www.rabbitmq.com/docs/install-debian
rabbitmqctl add_user admin <Password>
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
rabbitmqctl add_vhost <scm-dev-vhost>
rabbitmqctl add_user <scm> <password>
rabbitmqctl set_permissions -p <scm-dev-vhost> <scm> ".*" ".*" ".*"
rabbitmq-plugins enable rabbitmq_management
apt install mariadb-server
/etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0
mysql_secure_installation
mysql -u root -p
CREATE DATABASE scm_db;
CREATE USER 'scm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON scm_db.* TO 'scm'@'%';
FLUSH PRIVILEGES;
from celery_app import make_celery
from flask import Flask
app = Flask(__name__)
app.config.update(
CELERY_BROKER_URL='amqp://scm:password@192.168.18.92:5672/scm-dev-vhost',
CELERY_RESULT_BACKEND='db+mysql://scm:password@192.168.18.92:3306/scm_db?charset=utf8mb4'
)
celery = make_celery(app)
@celery.task
def add_numbers(a, b):
return a + b
from flask import Flask, request, jsonify
from tasks import add_numbers
app = Flask(__name__)
@app.route('/add_task', methods=['POST'])
def add_task():
data = request.get_json()
if not data or 'a' not in data or 'b' not in data:
return jsonify({'error': 'Invalid data'}), 400
a = data['a']
b = data['b']
task = add_numbers.apply_async((a, b))
return jsonify({'task_id': task.id}), 202
@app.route('/task_status/<task_id>', methods=['GET'])
def task_status(task_id):
task = add_numbers.AsyncResult(task_id)
if task.state == 'PENDING':
response = {
'state': task.state,
'status': 'Pending...'
}
elif task.state == 'SUCCESS':
response = {
'state': task.state,
'result': task.result
}
else:
response = {
'state': task.state,
'status': str(task.info)
}
return jsonify(response)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
from celery import Celery
def make_celery(app):
celery = Celery(
app.import_name,
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL']
)
celery.conf.update(app.config)
return celery
celery -A tasks.celery worker --loglevel=info
python app.py