그래서 나는 RabbitMQ와 셀러리를 사용하고 있습니다. 나는 사용자를 등록하는 RESTful API를 가지고있다. 원격 셀러리 작업자를 사용하여 등록 이메일을 비동기 적으로 보내므로 API가 빠른 응답을 반환 할 수 있습니다.셀러리 왜 작업 대기열에 머물러 있습니까
from .tasks import send_registration_email
def register_user(user_data):
# save user to the database etc
send_registration_email.delay(user.id)
return {'status': 'success'}
잘 작동합니다. 비 차단 비동기 방식으로 이메일을 보냈습니다 (실패한 경우 다시 시도 할 수 있음). 문제는 RabbitMQ 관리 콘솔을 볼 때입니다. send_registration_email이 임의의 대기열을 만들었습니다. 같은 뭔가 :
내가 작업이 성공적으로 실행 된 것을 볼 수 있습니다. 그러면 랜덤 큐가 RabbitMQ에 영원히 머물러있는 이유는 무엇입니까? 이것은 작업 페이로드입니다.
{"status": "SUCCESS", "traceback": null, "result": true, "task_id": "aad10877-3508-4179-a5fb-99f1bd0b8b2f", "children": []}
예. 그 동안 나는 이것을 알아 냈다. ignore_result = True를 작업 주석에 추가했습니다. 결과를 무시하는 것이 좋은 습관입니까? 나는 어떤 결과 (전자 메일, 로그 회전,보고 및 유지 관리 작업 등을 보내기위한 많은 작업)를 반환하지 않는 많은 작업을 가지고 있으므로 결과를 무시합니다. –
다른 RabbitMQ 작업에서 결과를 읽으십니까? 이 경우 RESULT_BACKEND를 삭제하는 것이 더 나은 해결책이라고 생각합니다. – Rustem
결과를 읽는 작업이 있으므로 결과 백엔드를 끌 수 없습니다. 실제로 내 전체 SOA는 AMQP에서 실행 중이다. SOAP 대신 RabbitMQ/Celery를 통해 내 서비스가 서로 이야기합니다. –