Configurando o RabbitMQ
Nesta página
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 trocaamq.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 dorabbitmqctl
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 quenet_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">>