Configurando o RabbitMQ

Configurando o RabbitMQ em sistemas *nix

Configurando seu ambiente

O RabbitMQ procura um conjunto de variáveis ​​de ambiente em /etc/rabbitmq/rabbitmq-env.conf. Se não existir, assume valores padrão. Todos os valores em rabbitmq-env.conf são exportados para o ambiente em que o servidor RabbitMQ é executado com um prefixo RABBITMQ_; este prefixo não está incluído no arquivo de configuração. As seguintes variáveis ​​podem ser definidas (em uma sintaxe key=value):

NODENAME: Define o nome do nó RabbitMQ.

CONFIG_FILE: Define a localização do arquivo de configuração do RabbitMQ (não este arquivo de ambiente)

NODE_IP_ADDRESS: Define o endereço IP específico para escutar.

NODE_PORT: Define a porta para escutar

DIST_PORT: define a porta para escutar o clustering

USE_LONGNAME: valor booleano que indica se deve ou não usar nomes totalmente qualificados para identificar nós. Útil quando em ambientes com nomes curtos idênticos.

CTL_ERL_ARGS: Define argumentos para o comando erl invocado ao executar rabbitmqctl. Útil para depuração.

SERVER_ERL_ARGS: Define argumentos para o comando erl invocado ao iniciar o RabbitMQ. A configuração desse valor substitui o padrão (consulte a configuração de exemplo abaixo).

SERVER_ADDITIONAL_ERL_ARGS: Define argumentos adicionais para o comando erl invocado ao iniciar o RabbitMQ. Definir este valor anexa à variável SERVER_ERL_ARGS e está vazio por padrão.

SERVER_START_ARGS: Também definido para o comando erl invocado ao iniciar o RabbitMQ.

Um arquivo de configuração de exemplo (todos os valores são, na verdade, padrões):

NODENAME=rabbit@localhost    
CONFIG_FILE=/etc/rabbitmq/rabbitmq.config
NODE_IP_ADDRESS=""
NODE_PORT=5672
DIST_PORT=25672
USE_LONGNAME=false
CTL_ERL_ARGS=""
SERVER_ERL_ARGS="+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"
SERVER_ADDITIONAL_ERL_ARGS=""
SERVER_START_ARGS=""

Configurando o RabbitMQ

Nota: O arquivo de configuração do RabbitMQ está na sintaxe de configuração padrão do Erlang. Se você não estiver familiarizado com Erlang, isso pode ser confuso no início. Segue o seguinte formato:

[
    {rabbit,
        [
            {config_value_1, []},
            {config_value_2, []}
        ]
    },
    {additional_rabbitmq_plugins,
        [...]
    }
]

A seção de configuração do RabbitMQ tem as seguintes chaves (extraídas de https://www.rabbitmq.com/configure.html ):

  • tcp_listeners: Lista de portas nas quais escutar conexões AMQP (sem SSL). Pode conter inteiros (significando “ouvir em todas as interfaces”) ou tuplas como {"127.0.0.1", 5672} para escutar em uma ou mais interfaces.

Padrão: [5672]

  • num_tcp_acceptors: Número de processos Erlang que aceitarão conexões para os listeners TCP.

Padrão: 10

  • handshake_timeout: Tempo máximo para handshake AMQP 0-8/0-9/0-9-1 (após conexão de soquete e handshake SSL), em milissegundos.

Padrão: 10000

  • ssl_listeners: Como acima, para conexões SSL.

Padrão: []

  • num_ssl_acceptors: Número de processos Erlang que aceitarão conexões para os listeners SSL.

Padrão: 1

  • ssl_options: configuração SSL.

Padrão: []

  • ssl_handshake_timeout: tempo limite de handshake SSL, em milissegundos.

Padrão: 5000

  • vm_memory_high_watermark: Limite de memória no qual o controle de fluxo é acionado. Consulte a documentação do controle de fluxo baseado em memória.

Padrão: 0,4

  • vm_memory_high_watermark_paging_ratio: Fração do limite máximo de marca d’água na qual as filas começam a enviar mensagens para o disco para liberar memória. Consulte a documentação do controle de fluxo baseado em memória.

Padrão: 0,5

  • disk_free_limit: Limite de espaço livre em disco da partição na qual o RabbitMQ está armazenando dados. Quando o espaço em disco disponível fica abaixo desse limite, o controle de fluxo é acionado. O valor pode ser definido em relação à quantidade total de RAM (por exemplo, {mem_relative, 1.0}). O valor também pode ser definido como um número inteiro de bytes. Ou, alternativamente, em unidades de informação (por exemplo, "50MB"). Por padrão, o espaço livre em disco deve exceder 50 MB. Consulte a documentação de alarmes de disco.

Padrão: 50000000

  • log_levels: Controla a granularidade do registro. O valor é uma lista de categoria de evento de log e pares de nível de log.

O nível pode ser none (nenhum evento é registrado), error (apenas erros são registrados), warning (apenas erros e avisos são registrados), info (erros, avisos e mensagens informativas são registrados ), ou debug (erros, avisos, mensagens informativas e mensagens de depuração são registradas).

Atualmente existem quatro categorias definidas. Outros eventos, atualmente não categorizados, são sempre registrados.

As categorias são:

  • canal - para todos os eventos relacionados aos canais AMQP

  • connection - para todos os eventos relacionados a conexões de rede

  • federação - para todos os eventos relacionados à federação

  • espelhamento - para todos os eventos relacionados a filas espelhadas

Padrão: [{conexão, informação}]

  • frame_max: Tamanho máximo permitido de um frame (em bytes) para negociar com os clientes. Definir como 0 significa “ilimitado”, mas acionará um bug em alguns clientes QPid. Definir um valor maior pode melhorar o rendimento; definir um valor menor pode melhorar a latência.

Padrão: 131072

  • channel_max: Número máximo permitido de canais para negociar com os clientes. Definir como 0 significa “ilimitado”. Usar mais canais aumenta o volume de memória do broker.

Padrão: 0

  • channel_operation_timeout: Tempo limite de operação do canal em milissegundos (usado internamente, não exposto diretamente aos clientes devido a diferenças e limitações do protocolo de mensagens).

Padrão: 15000

  • heartbeat: Valor que representa o atraso de heartbeat, em segundos, que o servidor envia no frame connection.tune. Se definido como 0, as pulsações são desabilitadas. Os clientes podem não seguir a sugestão do servidor, consulte a referência AMQP para obter mais detalhes. A desativação de pulsações pode melhorar o desempenho em situações com um grande número de conexões, mas pode levar à queda de conexões na presença de dispositivos de rede que fecham conexões inativas.

Padrão: 60 (580 antes da versão 3.5.5)

  • default_vhost: Host virtual a ser criado quando o RabbitMQ cria um novo banco de dados do zero. A troca amq.rabbitmq.log existirá neste host virtual.

Padrão: <<"/">>

  • default_user: Nome de usuário a ser criado quando o RabbitMQ cria um novo banco de dados do zero.

Padrão: <<"convidado">>

  • default_pass: Senha para o usuário padrão.

Padrão: <<"convidado">>

  • default_user_tags: Tags para o usuário padrão.

Padrão: [administrador]

  • default_permissions: Permissões para atribuir ao usuário padrão ao criá-lo.

Padrão: [<<".*">>, <<".*">>, <<".*">>]

  • loopback_users: Lista de usuários que só têm permissão para se conectar ao broker por meio de uma interface de loopback (ou seja, localhost).

Se você deseja permitir que o usuário convidado padrão se conecte remotamente, você precisa alterar isso para [].

Padrão: [<<"guest">>]

  • cluster_nodes: Configure para fazer com que o clustering aconteça automaticamente quando um nó for iniciado pela primeira vez. O primeiro elemento da tupla são os nós nos quais o nó tentará agrupar. O segundo elemento é disco ou ram e determina o tipo de nó.

Padrão: {[], disco}

  • server_properties: Lista de pares chave-valor para anunciar aos clientes na conexão.

Padrão: []

  • collect_statistics: modo de coleta de estatísticas. Principalmente relevante para o plugin de gerenciamento. As opções são:

  • none (não emite eventos estatísticos)

  • grosseiro (emitir estatísticas por fila / por canal / por conexão)

  • fine (também emite estatísticas por mensagem)

Você provavelmente não quer mudar isso sozinho.

Padrão: nenhum

  • collect_statistics_interval: Intervalo de coleta de estatísticas em milissegundos. Principalmente relevante para o plugin de gerenciamento.

Padrão: 5000

  • auth_mechanisms: mecanismos de autenticação SASL para oferecer aos clientes.

Padrão: ['PLAIN', 'AMQPLAIN']

  • auth_backends: Lista de backends de autenticação/autorização a serem usados. Esta lista pode conter nomes de módulos (neste caso o mesmo módulo é usado para autenticação e autorização), ou 2-tuplas como {ModN, ModZ} neste caso ModN é usado para autenticação e ModZ é usado para autorização.

No caso de 2 tuplas, ModZ pode ser substituído por uma lista, cujos elementos devem confirmar cada consulta de autorização, por exemplo. {ModN, [ModZ1, ModZ2]}. Isso permite que os plug-ins de autorização se misturem e forneçam restrições de segurança adicionais.

Outros bancos de dados além do rabbit_auth_backend_internal estão disponíveis através de plugins.

Padrão: [rabbit_auth_backend_internal]

  • reverse_dns_lookups: Defina como true para que o RabbitMQ execute uma pesquisa DNS reversa nas conexões do cliente e apresente essas informações através do rabbitmqctl e do plugin de gerenciamento.

Padrão: falso

  • delegate_count: Número de processos delegados a serem usados ​​para comunicação intra-cluster. Em uma máquina que possui um número muito grande de núcleos e também faz parte de um cluster, você pode querer aumentar esse valor.

Padrão: 16

  • trace_vhosts: Usado internamente pelo rastreador. Você não deve mudar isso.

Padrão: []

  • tcp_listen_options: Opções de socket padrão. Você provavelmente não quer mudar isso.

Predefinição:

  [{backlog,       128},
   {nodelay,       true},
   {exit_on_close, false}]
  • hipe_compile: Defina como true para pré-compilar partes do RabbitMQ com HiPE, um compilador just-in-time para Erlang. Isso aumentará a taxa de transferência do servidor ao custo de maior tempo de inicialização.

Você pode ver um desempenho 20-50% melhor ao custo de alguns minutos de atraso na inicialização. Esses números são altamente dependentes da carga de trabalho e do hardware.

O suporte HiPE pode não ser compilado em sua instalação Erlang. Caso contrário, habilitar esta opção fará com que uma mensagem de aviso seja exibida e a inicialização prosseguirá normalmente. Por exemplo, usuários Debian / Ubuntu precisarão instalar o pacote erlang-base-hipe.

O HiPE não está disponível em algumas plataformas, incluindo Windows.

O HiPE tem problemas conhecidos nas versões Erlang/OTP anteriores à 17.5. Usar uma versão Erlang/OTP recente é altamente recomendado para HiPE.

Padrão: falso

  • cluster_partition_handling: Como lidar com partições de rede. Os modos disponíveis são:

  • ignorar

  • pause_minority

  • {pause_if_all_down, [nós], ignore | autoheal} onde [nodes] é uma lista de nomes de nós (ex: ['rabbit@node1', 'rabbit@node2'])

  • autocura

Consulte a documentação sobre partições para obter mais informações.

Padrão: ignorar

  • cluster_keepalive_interval: Com que frequência os nós devem enviar mensagens de manutenção de atividade para outros nós (em milissegundos). Note que isso não é a mesma coisa que net_ticktime; mensagens de manutenção de atividade perdidas não farão com que os nós sejam considerados inativos.

Padrão: 10000

  • queue_index_embed_msgs_below: Tamanho em bytes da mensagem abaixo do qual as mensagens serão incorporadas diretamente no índice da fila. Você é aconselhado a ler a documentação de ajuste do persister antes de alterar isso.

Padrão: 4096

  • msg_store_index_module: Módulo de implementação para indexação de filas. Você é aconselhado a ler a documentação de ajuste do persister antes de alterar isso.

Padrão: rabbit_msg_store_ets_index

  • backing_queue_module: Módulo de implementação para o conteúdo da fila. Você provavelmente não quer mudar isso.

Padrão: rabbit_variable_queue

  • msg_store_file_size_limit: Valor ajustável para o persister. Você quase certamente não deve mudar isso.

Padrão: 16777216

  • mnesia_table_loading_timeout: Tempo limite usado ao esperar que as tabelas Mnesia em um cluster fiquem disponíveis.

Padrão: 30000

  • queue_index_max_journal_entries: Valor ajustável para o persister. Você quase certamente não deve mudar isso.

Padrão: 65536

  • queue_master_locator: Estratégia de localização do mestre da fila. As estratégias disponíveis são:

  • <<"min-masters">>

  • <<"client-local">>

  • <<"aleatório">>

Consulte a documentação sobre o local do mestre de filas para obter mais informações.

Padrão: <<"client-local">>