Sunday 4 February 2018

Broker_transport_options 셀러리


Broker_transport_options 셀러리
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
SQS 함께 장고 셀러리를 실행하는 방법?
안녕하세요, SQS를 사용하여 장고 셀러리를 생산해야하지만 작동하지 않습니다. 내 설정에는 다음과 같은 구성이 있습니다.
나는 djellery 작업을 수행하기 위해 다른 것을 추가하거나 무엇을해야하는지 알지 못합니다. 도와주세요.
나는 셀러리와 SQS를 연결할 수있었습니다.
위, 참고 BROKER_RUL = 'sqs : //':
로그인 자격 증명은 AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 환경 변수를 사용하여 설정할 수도 있습니다. 이 경우 브로커 URL은 sqs : // 만 가능합니다.
SQS와 상호 작용하려면 활동중인 직원이 필요하다는 점에 유의하십시오. 콘솔을 통해 (가상 환경에서) :
Celery 4.0.0을 사용하고 있고이 행이있는 경우.
네임 스페이스는 모든 셀러리 관련 설정이 CELERY로 시작해야 함을 나타냅니다.
CELERY_BROKER_URL, CELERY_BROKER_TRANSPORT_OPTIONS을 (를) 사용하십시오.

Redis 사용하기 ¶
설치 ¶
Redis 지원을 위해서는 추가 종속성을 설치해야합니다. 셀러리 [redis] 번들을 사용하여 한 번에 Celery와 이러한 종속성을 모두 설치할 수 있습니다.
구성 ¶
구성은 간단합니다. Redis 데이터베이스의 위치를 ​​구성하기 만하면됩니다.
URL의 형식은 다음과 같습니다.
구성표 뒤의 모든 필드는 선택 사항이며 데이터베이스 0을 사용하여 포트 6379에서 localhost로 기본 설정됩니다.
Unix 소켓 연결을 사용해야하는 경우 URL은 다음 형식이어야합니다.
Unix 소켓을 사용할 때 다른 데이터베이스 번호를 지정하는 것은 virtual_host 매개 변수를 URL에 추가하여 가능합니다.
Redis Sentinel 목록에 직접 연결하는 것도 쉽습니다.
가시성 타임 아웃 ¶
가시성 제한 시간은 메시지가 다른 작업자에게 다시 전달되기 전에 작업자가 작업을 확인하기를 기다리는 시간 (초)을 정의합니다. 아래주의 사항을 확인하십시오.
이 옵션은 broker_transport_options 설정을 통해 설정됩니다.
Redis의 기본 표시 시간 제한은 1 시간입니다.
Redis에서 작업의 상태 및 반환 값을 저장하려는 경우 다음 설정을 구성해야합니다.
Redis 결과 백엔드가 지원하는 전체 옵션 목록은 Redis backend settings를 참조하십시오.
센티널은 지원되는 백엔드가 아닙니다.
팬 아웃 접두어 ¶
브로드 캐스트 메시지는 기본적으로 모든 가상 호스트에서 볼 수 있습니다.
활성 가상 호스트에 의해서만 수신 될 수 있도록 메시지의 접두어로 전송 옵션을 설정해야합니다.
이전 버전을 사용하는 근로자 또는이 설정을 사용하지 않는 근로자와 통신 할 수 없게됩니다.
이 설정은 나중에 기본값이 될 것이므로 나중에보다는 더 빨리 마이그레이션하는 것이 좋습니다.
팬 아웃 패턴 ¶
근로자는 기본적으로 모든 작업 관련 이벤트를받습니다.
이를 방지하려면 worker가 worker 관련 이벤트에만 가입 할 수 있도록 fanout_patterns fanout 옵션을 설정해야합니다.
이 변경 사항은 이전 버전과 호환되지 않으므로 클러스터의 모든 작업자가이 옵션을 활성화해야합니다. 그렇지 않으면 통신 할 수 없게됩니다.
이 옵션은 기본적으로 나중에 사용하도록 설정됩니다.
공개 시간 제한 ¶
가시성 타임 아웃 내에서 작업이 확인되지 않으면 작업이 다른 작업자에게 다시 전달되어 실행됩니다.
이로 인해 실행 시간이 가시성 타임 아웃을 초과하는 ETA / 카운트 다운 / 재시도 태스크에 문제가 발생합니다. 실제로 그런 일이 발생하면 다시 실행되고 반복됩니다.
따라서 사용 계획을 세우는 데 가장 오래 걸린 ETA 시간과 일치하도록 표시 시간 제한을 늘려야합니다.
Celery는 작업자 종료시 메시지를 재전송하므로 긴 가시성 시간 제한을 설정하면 손실 된 & # 8217; 정전이나 강제 종료 된 근로자의 작업.
주기적인 작업은 가시성 타임 아웃의 영향을받지 않습니다. 이는 ETA / 카운트 다운과는 별개의 개념이기 때문에.
같은 이름의 전송 옵션을 구성하여이 시간 초과를 늘릴 수 있습니다.
값은 초 수를 설명하는 int 여야합니다.
주요 퇴거 ¶
일부 상황에서는 Redis가 데이터베이스에서 키를 제거 할 수 있습니다.
다음과 같은 오류가 발생할 경우 :
redis 구성 파일에서 timeout 매개 변수를 0으로 설정하여 redis-server가 키를 축출하지 않도록 구성 할 수 있습니다.

Broker_transport_options 셀러리
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
장고 + 셀러리 + SQS 설정. Celery는 ampq를 통해 기본 RabbitMQ에 연결합니다.
장고 앱에서 Celery의 기본 메시지 브로커로 Amazon SQS를 설정하려고합니다. 샐러리 작업자가 시작되지만 브로커는 기본 RabbitMQ로 설정됩니다. 아래에서 내 작업자의 결과를 볼 수 있습니다.
다음은 프로젝트에있는 일부 구성입니다. 내 celery. py는 다음과 같습니다.
브로커 URL을 설정하는 장고 셀러리 설정의 필수 부분은 다음과 같습니다.
가상 환경에서 다음과 같이 작업자를 시작하려고 할 때 :
다음 출력을받습니다.
Celery가 관련 Django 설정을 가져오고 처리하는 것처럼 작업이 나열됩니다. 설정을 SQS에서 Redis로 전환하려면 동일한 문제가 발생합니다.
읽기 자습서에서 알 수 있듯이 근로자의 결과는 비슷해야합니다.
또한 구식이기 때문에 나는 djcelery를 사용하지 않습니다. 셀러리 설정 페이지에서 권장하는 대신 django_celery_results를 사용하고 있습니다. 마지막 출력은 측면 프로젝트의 추측입니다.
내가 찾은 유일한 해결책은 명시 적으로 브로커와 데이터베이스 백엔드를 지정하는 것입니다.
Django settings. py의 설정이 완전히로드되지 않았거나 뭔가를 놓친 것 같아서 이상하게 보입니다. 그렇지 않으면 Celery의 버그입니다.
여기 왜 내가 문제가있다 :
장고의 모든 Celery 변수는 CELERY로 시작해야하므로 BROKER_URL 및 BROKER_TRANSPORT_OPTIONS 대신 CELERY_BROKER_URL 및 CELERY_BROKER_TRANSPORT_OPTIONS를 사용해야했습니다.

Amazon SQS 사용하기 ¶
설치 ¶
Amazon SQS 지원을 위해서는 pip를 사용하여 boto 라이브러리를 설치해야합니다.
구성 ¶
브로커 URL에 SQS를 지정해야합니다.
URL 형식은 다음과 같습니다.
당신은 & # 8220; & # 8221; 결국.
로그인 자격 증명은 AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 환경 변수를 사용하여 설정할 수도 있습니다. 이 경우 브로커 URL은 sqs : // 만 가능합니다.
인스턴스에서 IAM 역할을 사용하는 경우 BROKER_URL을 sqs : //로 설정하면 kombu가 인스턴스 메타 데이터에서 액세스 토큰을 검색하려고 시도합니다.
브로커 URL에 AWS 자격 증명을 지정하는 경우 비밀 액세스 키에 URL 인코딩이 필요한 안전하지 않은 문자가 포함될 수 있습니다.
지역 ¶
기본 영역은 us-east-1이지만 broker_transport_options 설정을 구성하여 다른 영역을 선택할 수 있습니다.
Amazon Web Services 지역에 대한 개요는 다음에서 찾을 수 있습니다.
가시성 타임 아웃 ¶
가시성 제한 시간은 메시지가 다른 작업자에게 다시 전달되기 전에 작업자가 작업을 확인하기를 기다리는 시간 (초)을 정의합니다. 아래주의 사항도 참조하십시오.
이 옵션은 broker_transport_options 설정을 통해 설정됩니다.
기본 표시 여부 제한 시간은 30 초입니다.
폴링 간격 ¶
폴링 간격은 폴링 실패 사이의 대기 시간 (초)을 결정합니다. 이 값은 int 또는 float가 될 수 있습니다. 기본적으로 값은 1 초입니다. 즉, 읽을 메시지가 더 이상 없을 때 작업자가 1 초 동안 잠자기 상태임을 나타냅니다.
더 자주 폴링하는 것이 더 비쌉니다. 따라서 폴링 간격을 늘리면 돈을 절약 할 수 있습니다.
폴링 간격은 broker_transport_options 설정을 통해 설정할 수 있습니다.
매우 빈번한 폴링 간격으로 인해 바쁜 루프가 생겨 작업자가 많은 CPU 시간을 사용하게됩니다. 밀리 세컨드 이하의 정밀도가 필요한 경우에는 RabbitMQ & lt; broker-amqp & gt;와 같은 다른 전송을 사용해보십시오. , 또는 Redis & lt; broker-redis & gt; .
대기열 접두어 ¶
기본적으로 Celery는 대기열 이름에 접두어를 지정하지 않습니다. SQS를 사용하는 다른 서비스가있는 경우 broker_transport_options 설정을 사용하여 구성 할 수 있습니다.
visibility_timeout 내에서 작업이 확인되지 않으면 작업이 다른 작업자에게 다시 전달되어 실행됩니다.
이로 인해 실행 시간이 가시성 타임 아웃을 초과하는 ETA / 카운트 다운 / 재시도 태스크에 문제가 발생합니다. 실제로 그런 일이 발생하면 다시 실행되고 반복됩니다.
따라서 사용 계획을 세우는 데 가장 오래 걸린 ETA 시간과 일치하도록 표시 시간 제한을 늘려야합니다.
Celery는 작업자 종료시 메시지를 재전송하므로 긴 가시성 시간 제한을 설정하면 손실 된 & # 8217; 정전이나 강제 종료 된 근로자의 작업.
정기 작업은 ETA / 카운트 다운과 별개의 개념이므로 가시성 타임 아웃의 영향을받지 않습니다.
이 글을 쓰는 시점에서 AWS에서 지원하는 최대 표시 시간 제한은 12 시간 (43200 초)입니다.
SQS는 아직 작업자 원격 제어 명령을 지원하지 않습니다.
SQS는 아직 이벤트를 지원하지 않으므로 셀러리 이벤트, Celerymon 또는 Django Admin 모니터와 함께 사용할 수 없습니다.
Amazon Web Services 제품군의 여러 제품은 결과를 저장하거나 게시 할 수있는 좋은 후보가 될 수 있지만 현재로서는 그러한 결과 백엔드가 포함되어 있지 않습니다.
amqp 결과 백엔드를 SQS와 함께 사용하지 마십시오.
모든 작업에 대해 하나의 대기열이 만들어지며 대기열이 수집되지 않습니다. 이렇게하면 AWS 결과 저장소 백엔드를 셀러리에 기여하는 데 더 많은 돈을 쓸 수 있습니다. :)

No comments:

Post a Comment