Migre seu cluster RabbitMQ autogerenciado para o Message Queue for RabbitMQ para resolver problemas de estabilidade, como acúmulo de mensagens e split-brain, além de obter alta concorrência, arquitetura distribuída e dimensionamento flexível.
Antes de começar
O Message Queue for RabbitMQ é um service de fila de mensagens desenvolvido pela Alibaba Cloud com base em tecnologia proprietária de armazenamento distribuído de mensagens. Ele segue o protocolo AMQP 0-9-1, mas não é apenas uma versão gerenciada do RabbitMQ open-source. Sua arquitetura evita problemas de estabilidade, como vazamentos de memória e falhas de servidor causadas por acúmulo de mensagens, e elimina o problema de split-brain em sistemas distribuídos. Também oferece alta escalabilidade e faturamento flexível conforme o uso para reduzir custos.
No entanto, o Message Queue for RabbitMQ difere do RabbitMQ open-source em alguns recursos. Antes de migrar, faça uma avaliação técnica de capacidades e de custo-benefício para garantir que o service atenda às suas necessidades.
Avaliação pré-migração
Avaliação técnica
O Message Queue for RabbitMQ e o RabbitMQ open-source apresentam diferenças em recursos, service, desempenho, exchanges e filas. Antes da migração, revise essas diferenças para determinar se o Message Queue for RabbitMQ atende às suas necessidades. Para uma comparação detalhada, consulte Comparison with open-source RabbitMQ.
O Message Queue for RabbitMQ impõe limites para clusters, chamadas de API e caracteres. Antes de migrar, avalie se esses limites atendem aos requisitos do seu negócio. Para mais informações, consulte Instance types.
Recomendamos escolha uma instância serverless dedicada. Essas instâncias suportam autenticação e permissões open-source, permitindo uma migração perfeita do RabbitMQ open-source para a cloud.
Avaliação de custos
O Message Queue for RabbitMQ oferece instâncias por assinatura e serverless com várias especificações. Para diferenças entre as especificações, consulte Instance types.
Em comparação com instâncias por assinatura, as instâncias serverless oferecem melhor elasticidade e eficiência de custos. Para regras de faturamento, consulte Billing for serverless instances.
Estime as operações de envio/recebimento, a contagem de filas e o volume de mensagens do seu cluster RabbitMQ autogerenciado usando os métodos a seguir.
Número de filas: Na página Overview do console RabbitMQ open-source, visualize Global counts para obter o número de objetos de metadados, como Queues e Exchanges.
-
Número de operações de envio/recebimento e volume de mensagens:
Método 1: Na página Overview do console de gerenciamento RabbitMQ open-source, visualize Message rates e calcule a soma das métricas Publish, Deliver (manual ack)/Deliver (auto ack) e Redelivered.

Método 2: Use um painel Prometheus Grafana para visualizar o QPS de todo o cluster e o volume de mensagens para tráfego de entrada e saída.
Procedimento de migração
Migrar metadados
Para migrar metadados, exporte-os do seu cluster RabbitMQ open-source e importe-os para sua instância Message Queue for RabbitMQ. Após uma importação bem-sucedida, o Message Queue for RabbitMQ cria os vhosts, filas, exchanges e bindings correspondentes na instância Message Queue for RabbitMQ de destino. Para etapas detalhadas, consulte Migrate metadata to the cloud.
Criar usuários
Clientes open-source devem usar nome de usuário e senha para autenticar com um broker Message Queue for RabbitMQ. As conexões são estabelecidas somente após autenticação bem-sucedida. O Message Queue for RabbitMQ suporta os dois modos de gerenciamento de identidade e permissão a seguir. Para mais informações, consulte User and permission management.
-
Autenticação e autorização open-source
Crie nomes de usuário e senhas personalizados e gerencie permissões por importing metadata.
-
Resource Access Management (RAM)
Gere nomes de usuário e senhas a partir do AccessKey ID e AccessKey Secret de um usuário RAM.
Estabelecer conexão de rede
O Message Queue for RabbitMQ fornece um PrivateLink endpoint que permite conectar à cloud através da Cloud Enterprise Network (CEN).
Se você usa o modo de autenticação e autorização open-source e já configurou um endpoint PrivateLink, pule esta etapa.
Migrar dados de mensagens
Estratégia de migração
Para garantir uma migração tranquila, migre os dados de mensagens por vhost, alternando as configurações de conexão do cliente e usando o plug-in RabbitMQ Shovel.
Benefícios
Garante uma migração de negócios suave.
Assegura que não haja perda de dados.
Elimina a necessidade de mapear topologias complexas em malha de chamadas entre aplicações.
Etapas de migração
Escolha as etapas de migração apropriadas com base no seu cenário:
-
Para migração sem tempo de inatividade:
Se produtores e consumidores de uma fila estiverem na mesma aplicação, consulte Scenario 1.
Se produtores e consumidores de uma fila estiverem em aplicações separadas, consulte Scenario 2.
Para cenários complexos onde o cluster RabbitMQ autogerenciado já executa tarefas Shovel, consulte Scenario 3.
Para migração com janela de manutenção: Se o seu negócio tolerar breve indisponibilidade, consulte Scenario 4.
Cenário 1: Migração sem tempo de inatividade (aplicações unificadas)
-
Comece com uma liberação canário: alterne alguns nós de service para a instância cloud atualizando suas configurações de cliente. Verifique o seguinte:
Produtores conseguem enviar mensagens para a fila na cloud.
Consumidores conseguem consumir mensagens da fila na cloud.
Funcionalidade e desempenho ponta a ponta atendem às expectativas.
Após confirme que os nós canário estão funcionando corretamente, configure e ative o plug-in Shovel no seu cluster RabbitMQ autogerenciado. Isso migrará as mensagens acumuladas existentes das filas no vhost especificado para as filas correspondentes na instância cloud.
-
Altere a configuração de conexão RabbitMQ para a instância cloud em todos os nós de service restantes usando uma atualização gradual. Neste ponto:
Todas as novas mensagens são gravadas diretamente nas filas da cloud.
Todos os consumidores buscam mensagens das filas da cloud.
O cluster autogerenciado não recebe mais novas mensagens e serve apenas como source para o Shovel drenar o acúmulo restante.
Monitore o acúmulo de mensagens nas filas do cluster autogerenciado. Quando o acúmulo for limpo, pare a tarefa Shovel.
-
Verifique o acúmulo das filas de um vhost no console de gerenciamento do seu cluster RabbitMQ autogerenciado. O acúmulo de uma fila é considerado limpo quando as contagens de mensagens ready e unacknowledged forem ambas 0.
No console RabbitMQ Management, na página Queues, o grupo Messages mostra o número de mensagens prontas na coluna Ready e o número de mensagens não confirmadas na coluna Unacked.
ImportanteSe o seu código envia mensagens atrasadas para uma exchange x-delayed-message, essas mensagens não entram na fila nem contam para o acúmulo até que o período de atraso expire. Antes de parar a tarefa Shovel, aguarde pelo menos o tempo máximo de atraso de mensagem configurado para garantir que todas as mensagens atrasadas entrem em suas filas.
Cenário 2: Migração sem tempo de inatividade (aplicações separadas)
Configure e ative o plug-in Shovel no seu cluster RabbitMQ autogerenciado para migrar as mensagens acumuladas existentes de todas as filas relevantes no vhost de destino para as filas correspondentes na instância cloud.
Inicie os services consumidores da instância RabbitMQ cloud para que eles comecem a buscar mensagens das filas na cloud.
Após verifique que os consumidores na cloud estão funcionando corretamente, pare os services consumidores conectados ao cluster autogerenciado.
Inicie os services produtores da instância RabbitMQ cloud. Verifique se novas mensagens são publicadas com sucesso nas filas da cloud e processadas pelos consumidores.
Após confirme que novas mensagens estão fluindo para as filas da cloud e sendo consumidas corretamente, pare os services produtores conectados ao cluster autogerenciado.
Neste ponto, todas as novas mensagens vão diretamente para as filas da cloud, enquanto o Shovel continua movendo quaisquer mensagens restantes do cluster autogerenciado.
Monitore o acúmulo de mensagens nas filas do cluster autogerenciado. Quando o acúmulo for limpo, pare a tarefa Shovel.
Cenário 3: Migração sem tempo de inatividade (com tarefas Shovel existentes)
Pare os services produtores e consumidores conectados ao cluster autogerenciado e atualize suas configurações para apontar para a instância RabbitMQ cloud.
Inicie os services produtores e consumidores conectados à instância cloud e verifique se estão funcionando corretamente.
No cluster autogerenciado, configure uma nova tarefa Shovel (Shovel A) para migrar o acúmulo de mensagens de todas as filas relevantes no vhost A para as filas correspondentes na instância cloud.
Pause a tarefa Shovel existente (Shovel B) que move mensagens do vhost B para o vhost A. Modifique o destino do Shovel B para apontar para a fila correspondente na instância RabbitMQ cloud e reative o Shovel B.
Monitore o acúmulo de mensagens nas filas do vhost B no cluster autogerenciado. Quando o acúmulo for limpo, exclua a tarefa Shovel B.
Monitore o acúmulo de mensagens nas filas do vhost A no cluster autogerenciado. Quando o acúmulo for limpo, exclua a tarefa Shovel A.
Cenário 4: Migração com tempo de inatividade
Pare os services produtores e consumidores conectados ao cluster autogerenciado.
Atualize a configuração RabbitMQ nos seus services para apontar para a instância RabbitMQ cloud.
Inicie os services produtores e consumidores da instância cloud e verifique se estão funcionando corretamente.
No seu cluster RabbitMQ autogerenciado, configure e ative o plug-in Shovel para migrar todas as mensagens restantes das filas para as filas correspondentes na instância cloud.
Monitore o acúmulo de mensagens nas filas do cluster autogerenciado. Quando o acúmulo for limpo, pare a tarefa Shovel.
Usar o plug-in Shovel
-
Faça login no seu cluster autogerenciado e execute o comando a seguir na linha de comando para ativar o plug-in Shovel:
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
-
Faça login no console de gerenciamento do seu cluster RabbitMQ autogerenciado. Na barra de navegação superior, clique em Admin e depois clique em Shovel Management à direita. Na seção Add a new shovel, configure Source e Destination, então clique em Add shovel.
Formato de configuração de Source: Para URI, insira
amqp://{username}:{password}@{ip}:{port}/{vhost}. Nesta URI:usernameepasswordsão suas credenciais,ipé o endereço IP do seu cluster autogerenciado,porté a porta de comunicação (geralmente5672) evhosté o vhost de source.Formato de configuração de Destination: Para URI, insira
amqp://{username}:{password}@{endpoint}:{port}/{vhost}. Nesta URI:usernameepasswordsão as credenciais estáticas criadas no console Message Queue for RabbitMQ,endpointé o endereço do endpoint da sua instância Message Queue for RabbitMQ,porté5672evhosté o vhost de destino.
Configure também o Virtual host, um Name obrigatório, o protocolo (como AMQP 0.9.1) e os nomes das filas de source e destino. Outros parâmetros incluem Prefetch count, Auto-delete (o padrão é Never), Add forwarding headers (o padrão é No), Reconnect delay e Acknowledgement mode (o padrão é On confirm).
-
Após adicionar o Shovel, acesse a página Shovel Status para verifique seu status. Um estado de execução indica que a tarefa foi iniciada com sucesso.
-
Quando o acúmulo de mensagens nas filas do seu cluster RabbitMQ autogerenciado for limpo, exclua a tarefa Shovel.
Na página de detalhes do Shovel, expanda a seção Delete this shovel na parte inferior e clique no botão Delete this shovel.
Referências
Para mais informações sobre o plug-in Shovel, consulte a documentação do Plug-in Shovel.