Broker_transport_options
Broker_transport_options
O transporte da VM permite que os clientes se conectem uns aos outros dentro da VM sem a sobrecarga da comunicação da rede. A conexão usada não é uma conexão de soquete, mas usa chamadas diretas de método que permitem um sistema de mensagens incorporado de alto desempenho.
O primeiro cliente a usar a conexão da VM inicializará um broker incorporado. Conexões subseqüentes anexarão esse mesmo intermediário. Depois que todas as conexões de VM ao broker tiverem sido fechadas, o broker incorporado será encerrado automaticamente.
Sintaxe de Configuração do Broker Simples.
Essa é a sintaxe normal para uma conexão de VM. É simples, mas fornece apenas uma quantidade limitada de configuração do intermediário incorporado.
Se você deseja se conectar a um broker já instanciado e incorporado (por exemplo, como no caso do Apache ServiceMix), certifique-se de que o brokerName usado na URL vm: // brokerName corresponda ao brokerName do broker em execução.
Opções de transporte.
Se true, força cada comando enviado pelo transporte a ser empacotado e desarmado usando um WireFormat.
O nome do WireFormat a ser usado.
Todas as propriedades com este prefixo são usadas para configurar o wireFormat.
Se o intermediário for criado sob demanda, se ainda não existir.
Se & gt; 0, indica o tempo limite em milissegundos para aguardar o início de um agente. Valores -1 e 0 significam não espere. Apenas suportado no ActiveMQ 5.2+
Todas as propriedades com este prefixo são usadas para configurar o intermediário. Consulte Configurando Formatos de Conexão para mais informações.
Exemplo de URI.
Tenha cuidado com os corretores embutidos.
Se você estiver usando o transporte da VM e desejar configurar explicitamente um Embedded Broker, há uma chance de poder criar as conexões JMS antes de o intermediário ser inicializado. Atualmente, o ActiveMQ criará automaticamente um broker se você usar o transporte da VM e não houver um já configurado. (No 5.2 é possível usar as opções waitForStart e create = false para a conexão uri)
Então, para contornar isso, se você estiver usando o Spring, talvez deseje usar o atributo depends-on para que o ConnectionFactory do JMS dependa do broker integrado para evitar que isso aconteça. por exemplo.
Sintaxe de Configuração Avançada do Broker.
Essa é a sintaxe avançada para uma conexão de VM. Ele permite que você configure o agente mais extensivamente usando um URI de Configuração do Broker.
Opções de transporte.
Se true, força cada comando enviado pelo transporte a ser empacotado e desarmado usando um WireFormat.
O nome do WireFormat a ser usado.
Todas as propriedades com este prefixo são usadas para configurar o wireFormat.
Há mais opções para otimizar o uso do transporte da VM.
Exemplo de URI.
Configurando um Broker Incorporado Usando um Arquivo de Configuração Externo.
Para iniciar um broker incorporado usando o transporte vm e configurá-lo usando um arquivo de configuração externo (por exemplo, activemq. xml), use o seguinte URI:
Pesquisa.
Subprojetos.
Características.
Conectividade
Usando o ActiveMQ 5.
Apoio, suporte.
Desenvolvedores
Relatórios de projetos.
Apache ActiveMQ, ActiveMQ, Apache, o logotipo de penas Apache e o logotipo do projeto Apache ActiveMQ são marcas registradas da The Apache Software Foundation. Todas as outras marcas mencionadas podem ser marcas comerciais ou registradas de seus respectivos proprietários.
Broker_transport_options
Um dos primeiros tipos de URI que você provavelmente usará é um URI de transporte para se conectar a um corretor usando um tipo de transporte. Geralmente TCP ou VM são os primeiros transportes que você vai usar.
Tenha cuidado com o espaço em branco.
Todas as configurações de URI a seguir são baseadas na classe java. URI, que não permite que espaço em branco seja usado. Então, se você estiver usando failover: ou & # 160; static: URIs, não coloque nenhum espaço em branco ao redor do símbolo ','.
O AUTO Transport.
A partir do 5.13.0, o ActiveMQ tem suporte para detecção automática de protocolo de conexão por fio através de TCP, SSL, NIO e NIO SSL. & #;; OpenWire, STOMP, AMQP e MQTT são suportados. & #; Para detalhes, consulte a Referência de Transporte AUTOMÁTICO.
O transporte da VM.
O transporte da VM permite que os clientes se conectem uns aos outros dentro da VM sem a sobrecarga da comunicação da rede. A conexão usada não é aquela de uma conexão de soquete, mas usa chamadas de método direto para ativar um sistema de mensagens incorporado de alto desempenho.
O primeiro cliente a usar a conexão da VM inicializará um broker incorporado. Conexões subseqüentes anexarão esse mesmo intermediário. Depois que todas as conexões de VM ao broker tiverem sido fechadas, o broker incorporado será encerrado automaticamente.
O transporte AMQP.
A partir do 5.8.0, o ActiveMQ tem suporte para o AMQP. Para detalhes, consulte a Referência de Transporte do AMQP.
O MQTT Transport.
A partir do 5.6.0, o ActiveMQ também suporta o MQTT. É um peso leve de transporte de mensagens de publicação / assinatura. Consulte a Referência de Transporte do MQTT para obter detalhes.
O transporte TCP.
O transporte TCP permite que os clientes conectem um ActiveMQ remoto usando um soquete TCP.
O NIO Transport.
O mesmo que o transporte TCP, exceto que o pacote New I / O (NIO) é usado, o que pode fornecer um melhor desempenho. O pacote Java NIO não deve ser confundido com o pacote AIO4J da IBM.
Para alternar de TCP para NIO, basta alterar a parte do esquema do URI. Aqui está um exemplo, conforme definido no arquivo de configuração XML de um broker.
Tentando usar o nio transport url no lado do cliente irá instanciar o transporte TCP regular. Para mais informações, consulte a NIO Transport Reference.
O transporte SSL.
Isso permite que você fale sobre TCP usando SSL. Para mais informações, consulte a Referência de Transporte SSL.
O NIO SSL Transport.
Disponível desde 5.6.
Implementando o transporte SSL sobre o NIO. Isso permite conectar um grande número de clientes SSL a uma única instância do broker. É apenas a opção de transporte do lado do servidor.
Tentar usar o URL de transporte nio + ssl no lado do cliente instanciará o transporte SSL regular.
O transporte de pares.
O transporte peer fornece uma rede peer-to-peer com o ActiveMQ. O que realmente acontece é que o peer transport usa o transporte de VM para criar e conectar-se a um broker incorporado local, mas que configura o broker incorporado para estabelecer conexões de rede com outros intermediários de peer embedded.
O transporte UDP.
Isso permite que você fale sobre o UDP.
O transporte multicast.
Isso permite que você fale sobre Multicast.
O transporte HTTP e HTTPS.
Isso permite que o cliente e o agente do ActiveMQ façam o encapsulamento por meio de HTTP. Se o cliente não for JMS, convém consultar o suporte a REST ou Ajax.
O transporte de WebSockets.
Este transporte usa os novos WebSockets HTML5 para trocar mensagens com o intermediário. Para obter mais informações, consulte a Referência de Transporte do WebSockets.
O Stomp Transport.
Um transporte de texto simples que pode ser usado com vários idiomas. Veja & # 160; Stomp para mais detalhes.
URIs de finalidade geral.
Você pode configurar outros recursos por meio da sintaxe URI da seguinte maneira.
URI de configuração de conexão.
Qualquer conexão Apache ActiveMQ JMS pode ser configurada usando a URL ou definindo explicitamente propriedades nos objetos ActiveMQConnection ou ActiveMQConnectionFactory.
Opções de destino.
Você pode configurar várias opções relacionadas ao consumidor usando as Opções de Destino, que permitem configurar destinos usando a sintaxe de URI.
Configuração do Broker URI.
Você pode usar uma URI de Configuração do Broker para configurar um broker incorporado, usando a classe auxiliar BrokerFactory do Java ou usando o script shell do activemq. Para mais detalhes, consulte Como executar um corretor.
Configurando Formatos de Arame.
Qualquer transporte que envolva enviar mensagens para algum tipo de transporte de rede, como TCP ou UDP, geralmente usará o formato OpenWire. Isso é configurável para personalizar como as coisas aparecem no fio.
URIs de protocolo de alto nível.
Os seguintes protocolos de nível superior podem ser configurados via URI.
O transporte de failover.
As camadas de transporte de failover reconectam a lógica na parte superior de qualquer um dos outros transportes. Isto é o que costumava ser o transporte confiável no ActiveMQ 3. Sua sintaxe de configuração permite que você especifique qualquer número de URIs compostos. O transporte de failover escolhe aleatoriamente um dos URIs compostos e tenta estabelecer uma conexão com ele. Se não tiver êxito ou se falhar subsequentemente, uma nova conexão será estabelecida para um dos outros URIs na lista.
O transporte de fanout.
As camadas de transporte do Fanout reconectam e replicam a lógica sobre qualquer um dos outros transportes. Ele é usado para replicar comandos para vários brokers.
Usando o Discovery.
Muitas vezes, ao usar transportes como o TCP, você deseja usar o Discovery para localizar os agentes disponíveis. Isso é diferente de usar, digamos, Multicast - como a comunicação principal real é sobre TCP, mas o multicast é usado puramente para descobrir a localização dos corretores.
O transporte da descoberta.
O transporte Discovery funciona como o transporte confiável, exceto pelo fato de usar um agente de detecção para localizar a lista de URIs a serem conectadas.
O transporte de ZeroConf.
O transporte ZeroConf fornece Discovery e funciona como o Discovery Transport, mas em vez de usar nosso próprio mecanismo de descoberta baseado em multicast (que permite configurar o endereço e a porta multicast exatos, etc.), o transporte ZeroConf é usado.
Opções do lado do servidor.
Existem várias opções que podem ser usadas para alterar o comportamento no servidor para o & # 160; TransportConnector na configuração do agente do ActiveMQ. Esses são:
Isso é ativado por padrão para o transporte do MQTT.
Link Stealing é onde a última de duas ou mais conexões com o mesmo id (clientID para JMS) é considerada a conexão válida e a mais antiga é fechada pelo intermediário.
Se definido, o endereço de descoberta multicast para conexões do cliente para localizar o intermediário.
Monitorará as conexões para determinar se estão bloqueadas.
O nome do & # 160; Instância TransportConnector.
Reequilibrará automaticamente os clientes em todo o cluster em alterações de topologia.
Se ativado, atualizará as conexões do cliente (se elas usarem o & # 160; failover: // transport) das alterações no cluster do broker.
Atualizará os clientes se um agente for removido do cluster.
Lista separada por vírgula de expressões regulares. Corretores com um nome correspondente ao padrão serão incluídos para atualizações do cliente.
O endereço de ligação para o transporte.
Nota: as propriedades em vermelho são apenas as opções da versão 5.10 (e superior).
Pesquisa.
Subprojetos.
Características.
Conectividade
Usando o ActiveMQ 5.
Apoio, suporte.
Desenvolvedores
Relatórios de projetos.
Apache ActiveMQ, ActiveMQ, Apache, o logotipo de penas Apache e o logotipo do projeto Apache ActiveMQ são marcas registradas da The Apache Software Foundation. Todas as outras marcas mencionadas podem ser marcas comerciais ou registradas de seus respectivos proprietários.
Usando Redis¶
Instalação¶
Para o suporte do Redis, você precisa instalar dependências adicionais. Você pode instalar o Celery e essas dependências de uma só vez usando o pacote de aipo [redis]:
Configuração¶
A configuração é fácil, basta configurar a localização do seu banco de dados Redis:
Onde o URL está no formato de:
todos os campos após o esquema são opcionais e serão padronizados para localhost na porta 6379, usando o banco de dados 0.
Se uma conexão de soquete Unix deve ser usada, o URL precisa estar no formato:
Especificar um número de banco de dados diferente ao usar um soquete do Unix é possível adicionando o parâmetro virtual_host ao URL:
Também é fácil conectar-se diretamente a uma lista do Redis Sentinel:
Tempo Limite de Visibilidade
O tempo limite de visibilidade define o número de segundos a aguardar que o trabalhador confirme a tarefa antes que a mensagem seja reinserida em outro trabalhador. Não deixe de ver Advertências abaixo.
Esta opção é definida através da configuração broker_transport_options:
O tempo limite de visibilidade padrão do Redis é de 1 hora.
Se você também quiser armazenar o estado e retornar valores de tarefas no Redis, você deve definir estas configurações:
Para obter uma lista completa de opções suportadas pelo backend de resultados do Redis, consulte Configurações de back-end do Redis.
Observe que o sentinela não é um back-end suportado.
Prefixo do fanout
As mensagens de difusão serão vistas por todos os hosts virtuais por padrão.
Você precisa definir uma opção de transporte para prefixar as mensagens para que elas sejam recebidas apenas pelo host virtual ativo:
Note que você não poderá se comunicar com trabalhadores executando versões mais antigas ou com trabalhadores que não tenham essa configuração ativada.
Essa configuração será a padrão no futuro, então é melhor migrar mais cedo do que tarde.
Padrões de Fanout
Os trabalhadores receberão todos os eventos relacionados a tarefas por padrão.
Para evitar isso, você deve definir a opção de fanout fanout_patterns para que os funcionários possam se inscrever apenas em eventos relacionados ao trabalhador:
Observe que essa alteração é incompatível com versões anteriores, portanto, todos os funcionários do cluster devem ter essa opção ativada, caso contrário, eles não poderão se comunicar.
Esta opção será ativada por padrão no futuro.
Tempo limite de visibilidade¶
Se uma tarefa não for reconhecida dentro do Tempo Limite de Visibilidade, a tarefa será reenviada para outro trabalhador e executada.
Isso causa problemas com as tarefas ETA / contagem regressiva / repetição, em que o tempo de execução excede o tempo limite de visibilidade; na verdade, se isso acontecer, será executado novamente e novamente em um loop.
Então você tem que aumentar o tempo limite de visibilidade para coincidir com o tempo do ETA mais longo que você está planejando usar.
Observe que o Aipo irá reenviar as mensagens no desligamento do funcionário, portanto, ter um longo tempo limite de visibilidade atrasará apenas a devolução de & # 8216; perdidos & # 8217; tarefas no caso de uma falha de energia ou trabalhadores com término forçado.
Tarefas periódicas não serão afetadas pelo tempo limite de visibilidade, pois esse é um conceito separado do ETA / contagem regressiva.
Você pode aumentar esse tempo limite configurando uma opção de transporte com o mesmo nome:
O valor deve ser um int descrevendo o número de segundos.
Despejo de chaves
O Redis pode despejar chaves do banco de dados em algumas situações.
Se você tiver um erro como:
então você pode querer configurar o servidor-redis para não remover as chaves definindo o parâmetro timeout como 0 no arquivo de configuração do redis.
Usando o Amazon SQS¶
Instalação¶
Para o suporte do Amazon SQS, é necessário instalar a biblioteca do boto usando o pip:
Configuração¶
Você precisa especificar o SQS no URL do agente:
onde o formato da URL é:
você deve se lembrar de incluir o & # 8220; & # 64; & # 8221; no fim .
As credenciais de login também podem ser definidas usando as variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY; nesse caso, a URL do broker pode ser apenas sqs: //.
Se você estiver usando funções do IAM em instâncias, poderá definir o BROKER_URL como: sqs: // e o kombu tentará recuperar tokens de acesso dos metadados da instância.
Se você especificar credenciais da AWS na URL do broker, tenha em mente que a chave de acesso secreto pode conter caracteres não seguros que precisam ser codificados por URL.
Region¶
A região padrão é us-east-1, mas você pode selecionar outra região configurando a configuração broker_transport_options:
Uma visão geral das regiões da Amazon Web Services pode ser encontrada aqui:
Tempo Limite de Visibilidade
O tempo limite de visibilidade define o número de segundos a aguardar que o trabalhador confirme a tarefa antes que a mensagem seja reinserida em outro trabalhador. Veja também as ressalvas abaixo.
Esta opção é definida através da configuração broker_transport_options:
O tempo limite de visibilidade padrão é de 30 segundos.
Intervalo de pesquisa
O intervalo de pesquisa decide o número de segundos para dormir entre as pesquisas malsucedidas. Esse valor pode ser um int ou um float. Por padrão, o valor é um segundo: isso significa que o trabalhador irá dormir por um segundo quando não houver mais mensagens para ler.
Você deve observar que a pesquisa mais frequente também é mais cara, portanto, aumentar o intervalo de pesquisa pode economizar seu dinheiro.
O intervalo de pesquisa pode ser definido por meio da configuração broker_transport_options:
Intervalos de pesquisa muito freqüentes podem causar loops ocupados, resultando em muito tempo de CPU do trabalhador. Se você precisar de precisão de sub-milissegundos, considere usar outro transporte, como o RabbitMQ & lt; broker-amqp & gt; ou Redis & lt; corretor-redis & gt; .
Prefixo da fila
Por padrão, o Aipo não atribuirá nenhum prefixo aos nomes das filas. Se você tiver outros serviços usando o SQS, poderá configurá-lo usando a configuração broker_transport_options:
Se uma tarefa não for reconhecida no visibility_timeout, a tarefa será reenviada para outro trabalhador e executada.
Isso causa problemas com as tarefas ETA / contagem regressiva / repetição, em que o tempo de execução excede o tempo limite de visibilidade; na verdade, se isso acontecer, será executado novamente e novamente em um loop.
Então você tem que aumentar o tempo limite de visibilidade para coincidir com o tempo do ETA mais longo que você está planejando usar.
Observe que o Aipo irá reenviar as mensagens no desligamento do funcionário, portanto, ter um longo tempo limite de visibilidade atrasará apenas a devolução de itens perdidos & # 8216; tarefas no caso de uma falha de energia ou trabalhadores com término forçado.
Tarefas periódicas não serão afetadas pelo tempo limite de visibilidade, pois é um conceito separado do ETA / contagem regressiva.
O tempo limite máximo de visibilidade suportado pela AWS até o momento desta gravação é de 12 horas (43.200 segundos):
O SQS ainda não suporta comandos de controle remoto do trabalhador.
O SQS ainda não suporta eventos e, portanto, não pode ser usado com eventos de aipo, celerymon ou o monitor do Django Admin.
Vários produtos da família Amazon Web Services podem ser bons candidatos para armazenar ou publicar resultados, mas não há esse backend de resultados incluído nesse ponto.
Não use o backend de resultado de amqp com o SQS.
Ele criará uma fila para cada tarefa e as filas não serão coletadas. Isso poderia custar-lhe dinheiro que seria melhor gasto contribuindo com um back-store de resultados da AWS para o Celery :)
cadasta-workertoolbox 0.3.3.
Cadasta Worker Toolbox.
Uma coleção de ajudantes para auxiliar na construção rápida de trabalhadores assíncronos para o sistema Cadasta.
cadasta. workertoolbox. conf. Config.
A classe Config foi criada para simplificar a configuração das configurações do Celery, ajudando a garantir que todos os funcionários cumpram os requisitos de arquitetura do sistema assíncrono Cadasta. Essencialmente, oferece um diferencial entre a configuração padrão do Celery e a configuração exigida pelo nosso sistema. É o objetivo da classe não exigir muita personalização por parte do desenvolvedor, no entanto, pode ser necessária alguma personalização ao alterar a configuração entre os ambientes (por exemplo, se as configurações de desenvolvedor variarem muito das configurações de produtos).
Qualquer configuração de Aipo pode ser enviada via argumento de palavra-chave ou via variável de ambiente. Os argumentos enviados por meio do argumento de palavra-chave devem estar de acordo com as configurações minúsculas mais novas do Celery, em vez de suas contrapartes maiúsculas mais antigas. Os argumentos fornecidos pela variável de ambiente devem ser em maiúsculas e prefixados com o prefixo CELERY_ (por exemplo, para definir o valor task_track_started, uma variável de ambiente de CELERY_TASK_TRACK_STARTED deve ser definida). O prefixo pode ser customizado com um argumento de palavra-chave ENV_PREFIX fornecido ou uma variável de ambiente CELERY_ENV_PREFIX. Se um argumento de palavra-chave e uma variável de ambiente forem fornecidos para uma configuração, o argumento de palavra-chave terá precedência. Configurações com padrões não-string terão os valores da variável de ambiente executados através do `ast. literal_eval & lt; docs. python3/biblioteca/ast. html# ast. literal_eval & gt;` __, suportando tipos nativos do Python como bool ou tupla. Somente configurações minúsculas são mostradas ao chamar repr na instância Conf.
Depois de aplicadas, todas as configurações (e variáveis internas) estão disponíveis no objeto app. conf da instância do aplicativo Celery.
Configuração Fornecida.
Abaixo está a configuração que a classe Config fornecerá a uma instância do Celery.
result_backend.
broker_transport.
broker_transport_options.
task_queues.
O padrão é o seguinte conjunto de objetos kombu. Queue, onde filas são a variável interna QUEUES da configuração e exchange é um objeto kombu. Exchange construído a partir das configurações task_default_exchange e task_default_exchange_type:
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
task_routes.
O padrão é uma função que irá gerar um dict com o routing_key correspondente ao valor no primeiro índice de um nome de tarefa dividido no arquivo. e o conjunto de troca para um objeto kombu. Exchange construído a partir das configurações task_default_exchange e task_default_exchange_type.
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
task_default_exchange.
O padrão é 'task_exchange'
task_default_exchange_type.
task_track_started.
Variáveis Internas.
Abaixo estão argumentos e variáveis ambientais que podem ser usados para personalizar a configuração fornecida acima. Por convenção, todas as variáveis usadas para construir a configuração do Celery devem ser escritas inteiramente em maiúsculas. Salvo indicação em contrário, todas as variáveis podem ser especificadas por meio de argumento ou variável de ambiente (com preferência dada ao argumento).
Isso deve conter uma matriz de nomes para todas as filas relacionadas ao serviço usadas pela Plataforma Cadasta. Esses valores são usados para construir a configuração task_queues. Para fins de roteamento de tarefas de acompanhamento, é importante que todos os consumidores de tarefas estejam cientes de todas as filas disponíveis. Por esse motivo, se uma fila for usada por qualquer trabalhador de serviço, ela deverá ser especificada dentro dessa matriz. Não é necessário incluir as filas 'aipo' ou 'platform. fifo'. O padrão é o conteúdo da variável DEFAULT_QUEUES no arquivo `__init__.py dos módulos & lt; / cadasta / workertoolbox / __ init __. Py & gt;` __.
PLATFORM_QUEUE_NAME.
O padrão é 'platform. fifo'.
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
CHORD_UNLOCK_MAX_RETRIES.
Usado para definir o número máximo de vezes que uma tarefa celery. chord_unlock pode tentar novamente antes de desistir. Veja aipo / aipo # 2725. O padrão é 43200 (ou seja, desistir após 6 horas, assumindo que o padrão de default_retry_delay da tarefa esteja definido como 1 segundo).
SETUP_LOGGING.
Controla se uma configuração de log padrão deve ser aplicada ao aplicativo. No mínimo, isso inclui:
A criação de um manipulador de log do console para o nível INFO registra em log os manipuladores de log de arquivo para logs de nível INFO, salvando em app. info. log um manipulador de log de arquivo para logs de nível de ERROR, salvos em app. error. log.
Se a variável de ambiente OPBEAT_ORGANIZATION_ID estiver configurada, ocorrerá a seguinte configuração de log:
QUEUE_PREFIX.
Usado para preencher o valor queue_name_prefix das conexões broker_transport_options. O padrão é o valor da variável de ambiente QUEUE_PREFIX, se preenchida, 'dev', se não.
RESULT_DB_USER.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_USER, se preenchida, 'cadasta', se não.
RESULT_DB_PASS.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_PASS, se preenchida, 'cadasta', se não.
RESULT_DB_HOST.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_HOST, se preenchida, 'localhost', se não.
RESULT_DB_PORT.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_PORT, se for preenchida, 'cadasta', se não.
RESULT_DB_NAME.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_NAME, se preenchida, '5432', se não.
cadasta. workertoolbox. setup. setup_app.
Depois que o aplicativo Celery é fornecido com um objeto de configuração, há outras melhorias que devem ser seguidas para configurar corretamente o aplicativo. Por exemplo, as trocas e filas descritas na configuração devem ser declaradas. Essa função chama os procedimentos de acompanhamento necessários. Normalmente, ele é chamado automaticamente pelo sinal `worker_init & lt; docs. celeryproject / en / latest / userguide / signals. html # worker-init & gt;` __, mas deve ser chamado manualmente por bases de código que são executadas apenas como produtores de tarefas ou de dentro de um shell Python.
Leva dois argumentos:
app - Uma instância do aplicativo Celery (). Arremesso requerido - Estipulação booleana, caso os erros devam ser causados por falha na configuração. Caso contrário, os erros serão simplesmente registrados no logger do módulo no nível de exceção. Opcional, padrão: verdadeiro.
cadasta. workertoolbox. tests. build_functional_tests.
Quando fornecida com uma instância do aplicativo Celery, essa função gera um conjunto de testes funcionais para garantir que a configuração e a funcionalidade do aplicativo fornecido estejam de acordo com a arquitetura do sistema assíncrono Cadasta.
Um exemplo, onde existe uma instancia instanciada e configurada do aplicativo Celery () em um módulo de aipo paralelo:
aipo-redbeat 0.11.0.
Um Agendador de Celery Beat usando Redis para armazenamento persistente.
O RedBeat é um Agendador de batidas de aipo que armazena as tarefas agendadas e os metadados de tempo de execução no Redis.
Porquê RedBeat?
Criação e modificação dinâmica de tarefas em tempo real, sem tempo de inatividade prolongado Gerencie externamente as tarefas de qualquer idioma com bindings do Redis Armazenamento de dados compartilhados; O Beat não está vinculado a uma única unidade ou máquina. Inicialização rápida, mesmo com uma contagem grande de tarefas. Evite executar acidentalmente vários servidores do Beat.
Começando.
Instalar com pip:
Defina as configurações do RedBeat no seu arquivo de configuração do Celery:
Em seguida, especifique o agendador ao executar o Celery Beat:
O RedBeat usa um bloqueio distribuído para evitar várias instâncias em execução. Para desativar esse recurso, defina:
Configuração.
Você pode adicionar qualquer um dos seguintes parâmetros à sua configuração do Celery (veja abaixo os nomes dos valores de configuração compatíveis do Celery 3.x).
redbeat_redis_url.
URL para o servidor de redis usado para armazenar o planejamento, padronizado como valor de broker_url.
redbeat_key_prefix.
Um prefixo para todas as chaves criadas pelo RedBeat, o padrão é 'redbeat'.
redbeat_lock_key.
Chave usada para garantir que apenas uma única ocorrência seja executada por vez, o padrão é "& lt; redbeat_key_prefix & gt;: lock".
redbeat_lock_timeout.
A menos que seja atualizado, o bloqueio expirará após esse tempo, em segundos.
O padrão é cinco vezes do intervalo de loop do agendador padrão (300 segundos), portanto, 1500 segundos (25 minutos).
Veja os documentos sobre o aipo beat_max_loop_interval para mais informações.
Aipo 3.x nomes de configuração.
Aqui estão os nomes antigos dos valores de configuração para uso com o Celery 3.x.
Basicamente, o RedBeat usa um Sorted Set para armazenar o agendamento como uma fila de prioridade. Ele armazena detalhes da tarefa usando uma chave de hash com a definição da tarefa e os metadados.
O conjunto de agendamento contém as chaves de tarefa classificadas pelo próximo tempo de execução agendado.
Para cada tick do Beat.
obter lista de chaves devidas e próximo tíquete recuperar definições e metadados para todas as chaves da etapa anterior atualizar metadata da tarefa e reprogramar com o próximo tempo de execução das tarefas devido ao async_apply calcular o tempo até o início do próximo tique usando as tarefas restantes.
Criando Tarefas.
Você pode usar a maneira usual do Celery para definir tarefas estáticas ou pode inserir tarefas diretamente no Redis. As opções de configuração são chamadas beat_schedule, por exemplo:
No Celery 3.x, a opção config foi chamada CELERYBEAT_SCHEDULE.
A maneira mais fácil de inserir tarefas do Python é usar RedBeatSchedulerEntry ():
Alternativamente, você pode inserir diretamente no Redis criando um novo hash com uma chave de & lt; redbeat_key_prefix & gt;: task-name. Ele deve conter uma única definição de chave, que é um blob JSON com os detalhes da tarefa.
Uma tarefa de intervalo é definida com o JSON como:
Uma tarefa crontab é definida com o JSON como:
Agendamento.
Supondo que seus valores de configuração redbeat_key_prefix estejam definidos como "redbeat:" (padrão), você também precisará inserir a nova tarefa no agendamento com:
A pontuação é a próxima vez que a tarefa deve ser executada formatada como um registro de data e hora do UNIX.
Os aplicativos também podem querer manipular os metadados da tarefa para ter mais controle sobre quando uma tarefa é executada. A meta-chave contém um blob JSON da seguinte forma:
Por exemplo, por padrão, 'last_run_at' corresponde ao momento em que Bata despacha a tarefa, mas dependendo da latência da fila pode não ser executada imediatamente, mas o aplicativo pode atualizar os metadados com o tempo de execução real, permitindo que os intervalos sejam relativos à última execução Despacho.
Suporte de sentinela.
A conexão do redis pode usar um cluster Redis / Sentinel. A sintaxe de configuração é inspirada no aipo-redis-sentinel.
Algumas notas sobre a configuração:
observe o uso do esquema de redis-sentinel dentro da URL para o agente e o back-end de resultados. hostname e port são ignorados dentro do URL real. O Sentinel usa a configuração de sentinelas de opções de transporte para criar um Sentinel () em vez de um URL de configuração.
Desenvolvimento.
O RedBeat está disponível no GitHub.
Depois de ter a fonte, você pode executar os testes com os seguintes comandos:
Você também pode iniciar rapidamente uma instância de Beat com:
Um dos primeiros tipos de URI que você provavelmente usará é um URI de transporte para se conectar a um corretor usando um tipo de transporte. Geralmente TCP ou VM são os primeiros transportes que você vai usar.
Tenha cuidado com o espaço em branco.
Todas as configurações de URI a seguir são baseadas na classe java. URI, que não permite que espaço em branco seja usado. Então, se você estiver usando failover: ou & # 160; static: URIs, não coloque nenhum espaço em branco ao redor do símbolo ','.
O AUTO Transport.
A partir do 5.13.0, o ActiveMQ tem suporte para detecção automática de protocolo de conexão por fio através de TCP, SSL, NIO e NIO SSL. & #;; OpenWire, STOMP, AMQP e MQTT são suportados. & #; Para detalhes, consulte a Referência de Transporte AUTOMÁTICO.
O transporte da VM.
O transporte da VM permite que os clientes se conectem uns aos outros dentro da VM sem a sobrecarga da comunicação da rede. A conexão usada não é aquela de uma conexão de soquete, mas usa chamadas de método direto para ativar um sistema de mensagens incorporado de alto desempenho.
O primeiro cliente a usar a conexão da VM inicializará um broker incorporado. Conexões subseqüentes anexarão esse mesmo intermediário. Depois que todas as conexões de VM ao broker tiverem sido fechadas, o broker incorporado será encerrado automaticamente.
O transporte AMQP.
A partir do 5.8.0, o ActiveMQ tem suporte para o AMQP. Para detalhes, consulte a Referência de Transporte do AMQP.
O MQTT Transport.
A partir do 5.6.0, o ActiveMQ também suporta o MQTT. É um peso leve de transporte de mensagens de publicação / assinatura. Consulte a Referência de Transporte do MQTT para obter detalhes.
O transporte TCP.
O transporte TCP permite que os clientes conectem um ActiveMQ remoto usando um soquete TCP.
O NIO Transport.
O mesmo que o transporte TCP, exceto que o pacote New I / O (NIO) é usado, o que pode fornecer um melhor desempenho. O pacote Java NIO não deve ser confundido com o pacote AIO4J da IBM.
Para alternar de TCP para NIO, basta alterar a parte do esquema do URI. Aqui está um exemplo, conforme definido no arquivo de configuração XML de um broker.
Tentando usar o nio transport url no lado do cliente irá instanciar o transporte TCP regular. Para mais informações, consulte a NIO Transport Reference.
O transporte SSL.
Isso permite que você fale sobre TCP usando SSL. Para mais informações, consulte a Referência de Transporte SSL.
O NIO SSL Transport.
Disponível desde 5.6.
Implementando o transporte SSL sobre o NIO. Isso permite conectar um grande número de clientes SSL a uma única instância do broker. É apenas a opção de transporte do lado do servidor.
Tentar usar o URL de transporte nio + ssl no lado do cliente instanciará o transporte SSL regular.
O transporte de pares.
O transporte peer fornece uma rede peer-to-peer com o ActiveMQ. O que realmente acontece é que o peer transport usa o transporte de VM para criar e conectar-se a um broker incorporado local, mas que configura o broker incorporado para estabelecer conexões de rede com outros intermediários de peer embedded.
O transporte UDP.
Isso permite que você fale sobre o UDP.
O transporte multicast.
Isso permite que você fale sobre Multicast.
O transporte HTTP e HTTPS.
Isso permite que o cliente e o agente do ActiveMQ façam o encapsulamento por meio de HTTP. Se o cliente não for JMS, convém consultar o suporte a REST ou Ajax.
O transporte de WebSockets.
Este transporte usa os novos WebSockets HTML5 para trocar mensagens com o intermediário. Para obter mais informações, consulte a Referência de Transporte do WebSockets.
O Stomp Transport.
Um transporte de texto simples que pode ser usado com vários idiomas. Veja & # 160; Stomp para mais detalhes.
URIs de finalidade geral.
Você pode configurar outros recursos por meio da sintaxe URI da seguinte maneira.
URI de configuração de conexão.
Qualquer conexão Apache ActiveMQ JMS pode ser configurada usando a URL ou definindo explicitamente propriedades nos objetos ActiveMQConnection ou ActiveMQConnectionFactory.
Opções de destino.
Você pode configurar várias opções relacionadas ao consumidor usando as Opções de Destino, que permitem configurar destinos usando a sintaxe de URI.
Configuração do Broker URI.
Você pode usar uma URI de Configuração do Broker para configurar um broker incorporado, usando a classe auxiliar BrokerFactory do Java ou usando o script shell do activemq. Para mais detalhes, consulte Como executar um corretor.
Configurando Formatos de Arame.
Qualquer transporte que envolva enviar mensagens para algum tipo de transporte de rede, como TCP ou UDP, geralmente usará o formato OpenWire. Isso é configurável para personalizar como as coisas aparecem no fio.
URIs de protocolo de alto nível.
Os seguintes protocolos de nível superior podem ser configurados via URI.
O transporte de failover.
As camadas de transporte de failover reconectam a lógica na parte superior de qualquer um dos outros transportes. Isto é o que costumava ser o transporte confiável no ActiveMQ 3. Sua sintaxe de configuração permite que você especifique qualquer número de URIs compostos. O transporte de failover escolhe aleatoriamente um dos URIs compostos e tenta estabelecer uma conexão com ele. Se não tiver êxito ou se falhar subsequentemente, uma nova conexão será estabelecida para um dos outros URIs na lista.
O transporte de fanout.
As camadas de transporte do Fanout reconectam e replicam a lógica sobre qualquer um dos outros transportes. Ele é usado para replicar comandos para vários brokers.
Usando o Discovery.
Muitas vezes, ao usar transportes como o TCP, você deseja usar o Discovery para localizar os agentes disponíveis. Isso é diferente de usar, digamos, Multicast - como a comunicação principal real é sobre TCP, mas o multicast é usado puramente para descobrir a localização dos corretores.
O transporte da descoberta.
O transporte Discovery funciona como o transporte confiável, exceto pelo fato de usar um agente de detecção para localizar a lista de URIs a serem conectadas.
O transporte de ZeroConf.
O transporte ZeroConf fornece Discovery e funciona como o Discovery Transport, mas em vez de usar nosso próprio mecanismo de descoberta baseado em multicast (que permite configurar o endereço e a porta multicast exatos, etc.), o transporte ZeroConf é usado.
Opções do lado do servidor.
Existem várias opções que podem ser usadas para alterar o comportamento no servidor para o & # 160; TransportConnector na configuração do agente do ActiveMQ. Esses são:
Isso é ativado por padrão para o transporte do MQTT.
Link Stealing é onde a última de duas ou mais conexões com o mesmo id (clientID para JMS) é considerada a conexão válida e a mais antiga é fechada pelo intermediário.
Se definido, o endereço de descoberta multicast para conexões do cliente para localizar o intermediário.
Monitorará as conexões para determinar se estão bloqueadas.
O nome do & # 160; Instância TransportConnector.
Reequilibrará automaticamente os clientes em todo o cluster em alterações de topologia.
Se ativado, atualizará as conexões do cliente (se elas usarem o & # 160; failover: // transport) das alterações no cluster do broker.
Atualizará os clientes se um agente for removido do cluster.
Lista separada por vírgula de expressões regulares. Corretores com um nome correspondente ao padrão serão incluídos para atualizações do cliente.
O endereço de ligação para o transporte.
Nota: as propriedades em vermelho são apenas as opções da versão 5.10 (e superior).
Pesquisa.
Subprojetos.
Características.
Conectividade
Usando o ActiveMQ 5.
Apoio, suporte.
Desenvolvedores
Relatórios de projetos.
Apache ActiveMQ, ActiveMQ, Apache, o logotipo de penas Apache e o logotipo do projeto Apache ActiveMQ são marcas registradas da The Apache Software Foundation. Todas as outras marcas mencionadas podem ser marcas comerciais ou registradas de seus respectivos proprietários.
Usando Redis¶
Instalação¶
Para o suporte do Redis, você precisa instalar dependências adicionais. Você pode instalar o Celery e essas dependências de uma só vez usando o pacote de aipo [redis]:
Configuração¶
A configuração é fácil, basta configurar a localização do seu banco de dados Redis:
Onde o URL está no formato de:
todos os campos após o esquema são opcionais e serão padronizados para localhost na porta 6379, usando o banco de dados 0.
Se uma conexão de soquete Unix deve ser usada, o URL precisa estar no formato:
Especificar um número de banco de dados diferente ao usar um soquete do Unix é possível adicionando o parâmetro virtual_host ao URL:
Também é fácil conectar-se diretamente a uma lista do Redis Sentinel:
Tempo Limite de Visibilidade
O tempo limite de visibilidade define o número de segundos a aguardar que o trabalhador confirme a tarefa antes que a mensagem seja reinserida em outro trabalhador. Não deixe de ver Advertências abaixo.
Esta opção é definida através da configuração broker_transport_options:
O tempo limite de visibilidade padrão do Redis é de 1 hora.
Se você também quiser armazenar o estado e retornar valores de tarefas no Redis, você deve definir estas configurações:
Para obter uma lista completa de opções suportadas pelo backend de resultados do Redis, consulte Configurações de back-end do Redis.
Observe que o sentinela não é um back-end suportado.
Prefixo do fanout
As mensagens de difusão serão vistas por todos os hosts virtuais por padrão.
Você precisa definir uma opção de transporte para prefixar as mensagens para que elas sejam recebidas apenas pelo host virtual ativo:
Note que você não poderá se comunicar com trabalhadores executando versões mais antigas ou com trabalhadores que não tenham essa configuração ativada.
Essa configuração será a padrão no futuro, então é melhor migrar mais cedo do que tarde.
Padrões de Fanout
Os trabalhadores receberão todos os eventos relacionados a tarefas por padrão.
Para evitar isso, você deve definir a opção de fanout fanout_patterns para que os funcionários possam se inscrever apenas em eventos relacionados ao trabalhador:
Observe que essa alteração é incompatível com versões anteriores, portanto, todos os funcionários do cluster devem ter essa opção ativada, caso contrário, eles não poderão se comunicar.
Esta opção será ativada por padrão no futuro.
Tempo limite de visibilidade¶
Se uma tarefa não for reconhecida dentro do Tempo Limite de Visibilidade, a tarefa será reenviada para outro trabalhador e executada.
Isso causa problemas com as tarefas ETA / contagem regressiva / repetição, em que o tempo de execução excede o tempo limite de visibilidade; na verdade, se isso acontecer, será executado novamente e novamente em um loop.
Então você tem que aumentar o tempo limite de visibilidade para coincidir com o tempo do ETA mais longo que você está planejando usar.
Observe que o Aipo irá reenviar as mensagens no desligamento do funcionário, portanto, ter um longo tempo limite de visibilidade atrasará apenas a devolução de & # 8216; perdidos & # 8217; tarefas no caso de uma falha de energia ou trabalhadores com término forçado.
Tarefas periódicas não serão afetadas pelo tempo limite de visibilidade, pois esse é um conceito separado do ETA / contagem regressiva.
Você pode aumentar esse tempo limite configurando uma opção de transporte com o mesmo nome:
O valor deve ser um int descrevendo o número de segundos.
Despejo de chaves
O Redis pode despejar chaves do banco de dados em algumas situações.
Se você tiver um erro como:
então você pode querer configurar o servidor-redis para não remover as chaves definindo o parâmetro timeout como 0 no arquivo de configuração do redis.
Usando o Amazon SQS¶
Instalação¶
Para o suporte do Amazon SQS, é necessário instalar a biblioteca do boto usando o pip:
Configuração¶
Você precisa especificar o SQS no URL do agente:
onde o formato da URL é:
você deve se lembrar de incluir o & # 8220; & # 64; & # 8221; no fim .
As credenciais de login também podem ser definidas usando as variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY; nesse caso, a URL do broker pode ser apenas sqs: //.
Se você estiver usando funções do IAM em instâncias, poderá definir o BROKER_URL como: sqs: // e o kombu tentará recuperar tokens de acesso dos metadados da instância.
Se você especificar credenciais da AWS na URL do broker, tenha em mente que a chave de acesso secreto pode conter caracteres não seguros que precisam ser codificados por URL.
Region¶
A região padrão é us-east-1, mas você pode selecionar outra região configurando a configuração broker_transport_options:
Uma visão geral das regiões da Amazon Web Services pode ser encontrada aqui:
Tempo Limite de Visibilidade
O tempo limite de visibilidade define o número de segundos a aguardar que o trabalhador confirme a tarefa antes que a mensagem seja reinserida em outro trabalhador. Veja também as ressalvas abaixo.
Esta opção é definida através da configuração broker_transport_options:
O tempo limite de visibilidade padrão é de 30 segundos.
Intervalo de pesquisa
O intervalo de pesquisa decide o número de segundos para dormir entre as pesquisas malsucedidas. Esse valor pode ser um int ou um float. Por padrão, o valor é um segundo: isso significa que o trabalhador irá dormir por um segundo quando não houver mais mensagens para ler.
Você deve observar que a pesquisa mais frequente também é mais cara, portanto, aumentar o intervalo de pesquisa pode economizar seu dinheiro.
O intervalo de pesquisa pode ser definido por meio da configuração broker_transport_options:
Intervalos de pesquisa muito freqüentes podem causar loops ocupados, resultando em muito tempo de CPU do trabalhador. Se você precisar de precisão de sub-milissegundos, considere usar outro transporte, como o RabbitMQ & lt; broker-amqp & gt; ou Redis & lt; corretor-redis & gt; .
Prefixo da fila
Por padrão, o Aipo não atribuirá nenhum prefixo aos nomes das filas. Se você tiver outros serviços usando o SQS, poderá configurá-lo usando a configuração broker_transport_options:
Se uma tarefa não for reconhecida no visibility_timeout, a tarefa será reenviada para outro trabalhador e executada.
Isso causa problemas com as tarefas ETA / contagem regressiva / repetição, em que o tempo de execução excede o tempo limite de visibilidade; na verdade, se isso acontecer, será executado novamente e novamente em um loop.
Então você tem que aumentar o tempo limite de visibilidade para coincidir com o tempo do ETA mais longo que você está planejando usar.
Observe que o Aipo irá reenviar as mensagens no desligamento do funcionário, portanto, ter um longo tempo limite de visibilidade atrasará apenas a devolução de itens perdidos & # 8216; tarefas no caso de uma falha de energia ou trabalhadores com término forçado.
Tarefas periódicas não serão afetadas pelo tempo limite de visibilidade, pois é um conceito separado do ETA / contagem regressiva.
O tempo limite máximo de visibilidade suportado pela AWS até o momento desta gravação é de 12 horas (43.200 segundos):
O SQS ainda não suporta comandos de controle remoto do trabalhador.
O SQS ainda não suporta eventos e, portanto, não pode ser usado com eventos de aipo, celerymon ou o monitor do Django Admin.
Vários produtos da família Amazon Web Services podem ser bons candidatos para armazenar ou publicar resultados, mas não há esse backend de resultados incluído nesse ponto.
Não use o backend de resultado de amqp com o SQS.
Ele criará uma fila para cada tarefa e as filas não serão coletadas. Isso poderia custar-lhe dinheiro que seria melhor gasto contribuindo com um back-store de resultados da AWS para o Celery :)
cadasta-workertoolbox 0.3.3.
Cadasta Worker Toolbox.
Uma coleção de ajudantes para auxiliar na construção rápida de trabalhadores assíncronos para o sistema Cadasta.
cadasta. workertoolbox. conf. Config.
A classe Config foi criada para simplificar a configuração das configurações do Celery, ajudando a garantir que todos os funcionários cumpram os requisitos de arquitetura do sistema assíncrono Cadasta. Essencialmente, oferece um diferencial entre a configuração padrão do Celery e a configuração exigida pelo nosso sistema. É o objetivo da classe não exigir muita personalização por parte do desenvolvedor, no entanto, pode ser necessária alguma personalização ao alterar a configuração entre os ambientes (por exemplo, se as configurações de desenvolvedor variarem muito das configurações de produtos).
Qualquer configuração de Aipo pode ser enviada via argumento de palavra-chave ou via variável de ambiente. Os argumentos enviados por meio do argumento de palavra-chave devem estar de acordo com as configurações minúsculas mais novas do Celery, em vez de suas contrapartes maiúsculas mais antigas. Os argumentos fornecidos pela variável de ambiente devem ser em maiúsculas e prefixados com o prefixo CELERY_ (por exemplo, para definir o valor task_track_started, uma variável de ambiente de CELERY_TASK_TRACK_STARTED deve ser definida). O prefixo pode ser customizado com um argumento de palavra-chave ENV_PREFIX fornecido ou uma variável de ambiente CELERY_ENV_PREFIX. Se um argumento de palavra-chave e uma variável de ambiente forem fornecidos para uma configuração, o argumento de palavra-chave terá precedência. Configurações com padrões não-string terão os valores da variável de ambiente executados através do `ast. literal_eval & lt; docs. python3/biblioteca/ast. html# ast. literal_eval & gt;` __, suportando tipos nativos do Python como bool ou tupla. Somente configurações minúsculas são mostradas ao chamar repr na instância Conf.
Depois de aplicadas, todas as configurações (e variáveis internas) estão disponíveis no objeto app. conf da instância do aplicativo Celery.
Configuração Fornecida.
Abaixo está a configuração que a classe Config fornecerá a uma instância do Celery.
result_backend.
broker_transport.
broker_transport_options.
task_queues.
O padrão é o seguinte conjunto de objetos kombu. Queue, onde filas são a variável interna QUEUES da configuração e exchange é um objeto kombu. Exchange construído a partir das configurações task_default_exchange e task_default_exchange_type:
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
task_routes.
O padrão é uma função que irá gerar um dict com o routing_key correspondente ao valor no primeiro índice de um nome de tarefa dividido no arquivo. e o conjunto de troca para um objeto kombu. Exchange construído a partir das configurações task_default_exchange e task_default_exchange_type.
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
task_default_exchange.
O padrão é 'task_exchange'
task_default_exchange_type.
task_track_started.
Variáveis Internas.
Abaixo estão argumentos e variáveis ambientais que podem ser usados para personalizar a configuração fornecida acima. Por convenção, todas as variáveis usadas para construir a configuração do Celery devem ser escritas inteiramente em maiúsculas. Salvo indicação em contrário, todas as variáveis podem ser especificadas por meio de argumento ou variável de ambiente (com preferência dada ao argumento).
Isso deve conter uma matriz de nomes para todas as filas relacionadas ao serviço usadas pela Plataforma Cadasta. Esses valores são usados para construir a configuração task_queues. Para fins de roteamento de tarefas de acompanhamento, é importante que todos os consumidores de tarefas estejam cientes de todas as filas disponíveis. Por esse motivo, se uma fila for usada por qualquer trabalhador de serviço, ela deverá ser especificada dentro dessa matriz. Não é necessário incluir as filas 'aipo' ou 'platform. fifo'. O padrão é o conteúdo da variável DEFAULT_QUEUES no arquivo `__init__.py dos módulos & lt; / cadasta / workertoolbox / __ init __. Py & gt;` __.
PLATFORM_QUEUE_NAME.
O padrão é 'platform. fifo'.
Nota: Recomenda-se que os desenvolvedores não alterem essa configuração.
CHORD_UNLOCK_MAX_RETRIES.
Usado para definir o número máximo de vezes que uma tarefa celery. chord_unlock pode tentar novamente antes de desistir. Veja aipo / aipo # 2725. O padrão é 43200 (ou seja, desistir após 6 horas, assumindo que o padrão de default_retry_delay da tarefa esteja definido como 1 segundo).
SETUP_LOGGING.
Controla se uma configuração de log padrão deve ser aplicada ao aplicativo. No mínimo, isso inclui:
A criação de um manipulador de log do console para o nível INFO registra em log os manipuladores de log de arquivo para logs de nível INFO, salvando em app. info. log um manipulador de log de arquivo para logs de nível de ERROR, salvos em app. error. log.
Se a variável de ambiente OPBEAT_ORGANIZATION_ID estiver configurada, ocorrerá a seguinte configuração de log:
QUEUE_PREFIX.
Usado para preencher o valor queue_name_prefix das conexões broker_transport_options. O padrão é o valor da variável de ambiente QUEUE_PREFIX, se preenchida, 'dev', se não.
RESULT_DB_USER.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_USER, se preenchida, 'cadasta', se não.
RESULT_DB_PASS.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_PASS, se preenchida, 'cadasta', se não.
RESULT_DB_HOST.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_HOST, se preenchida, 'localhost', se não.
RESULT_DB_PORT.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_PORT, se for preenchida, 'cadasta', se não.
RESULT_DB_NAME.
Usado para preencher o modelo padrão result_backend. O padrão é a variável de ambiente RESULT_DB_NAME, se preenchida, '5432', se não.
cadasta. workertoolbox. setup. setup_app.
Depois que o aplicativo Celery é fornecido com um objeto de configuração, há outras melhorias que devem ser seguidas para configurar corretamente o aplicativo. Por exemplo, as trocas e filas descritas na configuração devem ser declaradas. Essa função chama os procedimentos de acompanhamento necessários. Normalmente, ele é chamado automaticamente pelo sinal `worker_init & lt; docs. celeryproject / en / latest / userguide / signals. html # worker-init & gt;` __, mas deve ser chamado manualmente por bases de código que são executadas apenas como produtores de tarefas ou de dentro de um shell Python.
Leva dois argumentos:
app - Uma instância do aplicativo Celery (). Arremesso requerido - Estipulação booleana, caso os erros devam ser causados por falha na configuração. Caso contrário, os erros serão simplesmente registrados no logger do módulo no nível de exceção. Opcional, padrão: verdadeiro.
cadasta. workertoolbox. tests. build_functional_tests.
Quando fornecida com uma instância do aplicativo Celery, essa função gera um conjunto de testes funcionais para garantir que a configuração e a funcionalidade do aplicativo fornecido estejam de acordo com a arquitetura do sistema assíncrono Cadasta.
Um exemplo, onde existe uma instancia instanciada e configurada do aplicativo Celery () em um módulo de aipo paralelo:
aipo-redbeat 0.11.0.
Um Agendador de Celery Beat usando Redis para armazenamento persistente.
O RedBeat é um Agendador de batidas de aipo que armazena as tarefas agendadas e os metadados de tempo de execução no Redis.
Porquê RedBeat?
Criação e modificação dinâmica de tarefas em tempo real, sem tempo de inatividade prolongado Gerencie externamente as tarefas de qualquer idioma com bindings do Redis Armazenamento de dados compartilhados; O Beat não está vinculado a uma única unidade ou máquina. Inicialização rápida, mesmo com uma contagem grande de tarefas. Evite executar acidentalmente vários servidores do Beat.
Começando.
Instalar com pip:
Defina as configurações do RedBeat no seu arquivo de configuração do Celery:
Em seguida, especifique o agendador ao executar o Celery Beat:
O RedBeat usa um bloqueio distribuído para evitar várias instâncias em execução. Para desativar esse recurso, defina:
Configuração.
Você pode adicionar qualquer um dos seguintes parâmetros à sua configuração do Celery (veja abaixo os nomes dos valores de configuração compatíveis do Celery 3.x).
redbeat_redis_url.
URL para o servidor de redis usado para armazenar o planejamento, padronizado como valor de broker_url.
redbeat_key_prefix.
Um prefixo para todas as chaves criadas pelo RedBeat, o padrão é 'redbeat'.
redbeat_lock_key.
Chave usada para garantir que apenas uma única ocorrência seja executada por vez, o padrão é "& lt; redbeat_key_prefix & gt;: lock".
redbeat_lock_timeout.
A menos que seja atualizado, o bloqueio expirará após esse tempo, em segundos.
O padrão é cinco vezes do intervalo de loop do agendador padrão (300 segundos), portanto, 1500 segundos (25 minutos).
Veja os documentos sobre o aipo beat_max_loop_interval para mais informações.
Aipo 3.x nomes de configuração.
Aqui estão os nomes antigos dos valores de configuração para uso com o Celery 3.x.
Basicamente, o RedBeat usa um Sorted Set para armazenar o agendamento como uma fila de prioridade. Ele armazena detalhes da tarefa usando uma chave de hash com a definição da tarefa e os metadados.
O conjunto de agendamento contém as chaves de tarefa classificadas pelo próximo tempo de execução agendado.
Para cada tick do Beat.
obter lista de chaves devidas e próximo tíquete recuperar definições e metadados para todas as chaves da etapa anterior atualizar metadata da tarefa e reprogramar com o próximo tempo de execução das tarefas devido ao async_apply calcular o tempo até o início do próximo tique usando as tarefas restantes.
Criando Tarefas.
Você pode usar a maneira usual do Celery para definir tarefas estáticas ou pode inserir tarefas diretamente no Redis. As opções de configuração são chamadas beat_schedule, por exemplo:
No Celery 3.x, a opção config foi chamada CELERYBEAT_SCHEDULE.
A maneira mais fácil de inserir tarefas do Python é usar RedBeatSchedulerEntry ():
Alternativamente, você pode inserir diretamente no Redis criando um novo hash com uma chave de & lt; redbeat_key_prefix & gt;: task-name. Ele deve conter uma única definição de chave, que é um blob JSON com os detalhes da tarefa.
Uma tarefa de intervalo é definida com o JSON como:
Uma tarefa crontab é definida com o JSON como:
Agendamento.
Supondo que seus valores de configuração redbeat_key_prefix estejam definidos como "redbeat:" (padrão), você também precisará inserir a nova tarefa no agendamento com:
A pontuação é a próxima vez que a tarefa deve ser executada formatada como um registro de data e hora do UNIX.
Os aplicativos também podem querer manipular os metadados da tarefa para ter mais controle sobre quando uma tarefa é executada. A meta-chave contém um blob JSON da seguinte forma:
Por exemplo, por padrão, 'last_run_at' corresponde ao momento em que Bata despacha a tarefa, mas dependendo da latência da fila pode não ser executada imediatamente, mas o aplicativo pode atualizar os metadados com o tempo de execução real, permitindo que os intervalos sejam relativos à última execução Despacho.
Suporte de sentinela.
A conexão do redis pode usar um cluster Redis / Sentinel. A sintaxe de configuração é inspirada no aipo-redis-sentinel.
Algumas notas sobre a configuração:
observe o uso do esquema de redis-sentinel dentro da URL para o agente e o back-end de resultados. hostname e port são ignorados dentro do URL real. O Sentinel usa a configuração de sentinelas de opções de transporte para criar um Sentinel () em vez de um URL de configuração.
Desenvolvimento.
O RedBeat está disponível no GitHub.
Depois de ter a fonte, você pode executar os testes com os seguintes comandos:
Você também pode iniciar rapidamente uma instância de Beat com:
Комментарии
Отправить комментарий