Ative a liberação canário de mensagens para cenários como liberação canário de ponta a ponta e isolamento de ambiente de desenvolvimento. Esse recurso estende a semântica canário ao RocketMQ marcando cada mensagem com o contexto do ambiente. Assim, consumidores canário e de base processam apenas as mensagens destinadas a eles.
Use a liberação canário de mensagens para:
Validar alterações na lógica de consumo com segurança. Direcione um subconjunto de mensagens para consumidores canário a fim de testar a nova lógica antes que ela processe tráfego de produção.
Evitar vazamento de tráfego em liberações canário de ponta a ponta. Quando consumidores de mensagens geram chamadas RPC downstream, mensagens sem tag podem escapar do roteamento canário e alcançar nós de produção. A marcação de mensagens mantém toda a cadeia de chamadas no ambiente correto.
O MSE oferece suporte à liberação canário de mensagens apenas para o RocketMQ, abrangendo tanto a versão open-source quanto as edições comerciais da Alibaba Cloud.
Como funciona
Quando um produtor envia uma mensagem, o Agente do MSE anexa o contexto atual do ambiente aos atributos da mensagem. Durante o consumo, o agente filtra as mensagens com base nesse contexto para garantir que cada consumidor receba apenas as mensagens destinadas ao seu ambiente.
Classificação de mensagens canário
Uma mensagem é classificada como canário em um dos seguintes casos:
Produzida por um nó canário. Qualquer mensagem enviada por um produtor executado em um ambiente canário.
Produzida por um nó de base que processa tráfego canário. Na ausência de um produtor canário, o tráfego canário retorna aos nós de base. As mensagens produzidas nesse cenário de fallback também são classificadas como mensagens canário.
Comportamento padrão de consumo
Após ativar a liberação canário de mensagens:
Mensagens de base são consumidas exclusivamente por consumidores de base.
Mensagens canário são consumidas tanto pelos consumidores de base quanto pelos consumidores canário correspondentes. Ambos os grupos consomem a mesma mensagem canário de forma independente.
Para restringir as mensagens canário apenas aos consumidores canário, consulte Configurar consumidores de mensagens canário.
Compatibilidade
Servidor RocketMQ
|
Edição |
Filtragem no servidor |
Filtragem no cliente |
|
RocketMQ open-source (4.5.0 ou posterior) |
Suportado (requer |
Suportado |
|
Alibaba Cloud RocketMQ 4.x |
Apenas Platinum Edition |
Todas as edições |
|
Alibaba Cloud RocketMQ 5.x |
Suportado |
Suportado |
Cliente RocketMQ
|
Cliente |
Versão mínima |
Suporte a filtragem |
|
Ons Client (Alibaba Cloud) |
1.8.0.Final ou posterior (série 1.x) |
-- |
|
|
4.2.0 ou posterior (série 4.x) |
No servidor e no cliente |
|
|
Série 5.x (requer Agente do MSE 4.2.2+) |
Apenas no servidor |
Para diferenças entre os SDKs do RocketMQ open-source, consulte a documentação oficial do RocketMQ.
O Agente do MSE não oferece suporte a mensagens transacionais.
Limitações
A liberação canário de mensagens entra em vigor somente quando ativada para ambos produtores e consumidores na governança de serviços do MSE.
-
Ao ativar a liberação canário de mensagens, o Agente do MSE modifica o Consumer Group de cada consumidor canário adicionando
_<tag>ao nome original do grupo, onde<tag>representa a tag do ambiente.Por exemplo, se o Consumer Group original for
group1e a tag do ambiente forgray, o Consumer Group passará a sergroup1_gray.ImportanteSe você usar o Alibaba Cloud RocketMQ, crie o Consumer Group modificado (por exemplo,
group1_gray) antes de ativar a liberação canário de mensagens. O MSE usa filtragem SQL-92 para a filtragem no lado do servidor. Caso use RocketMQ open-source 4.x, defina
enablePropertyFilter=trueno arquivobroker.confpara habilitar o suporte a SQL-92.Se sua configuração não suportar filtragem SQL-92, escolha a filtragem no cliente ao ativar a liberação canário de mensagens. A filtragem no cliente exige que cada ambiente processe todas as mensagens, o que aumenta a carga tanto nos produtores quanto nos consumidores. Evite usar filtragem no cliente em ambientes de produção.
Ativar liberação canário de mensagens
Antes de começar, verifique se você tem:
Um aplicativo gerenciado pelo MSE com produtores e consumidores de mensagens conectados à governança de microsserviços
Uma configuração compatível do RocketMQ (consulte Compatibilidade)
(Se estiver usando Alibaba Cloud RocketMQ) Um Consumer Group pré-criado para cada ambiente canário
Para ativar a liberação canário de mensagens:
Faça login no console do MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Governance > Application Governance.
Na página Application list, clique em no cartão de recursos do aplicativo desejado. No painel de navegação à esquerda, clique em Traffic management.
Clique em na aba Message grayscale.
-
Ao lado de Open message grayscale, clique em Edit. Configure o método de filtragem e as regras de consumo e clique em OK.
NotaApós alterar as configurações de liberação canário de mensagens, reinicie todos os nós do aplicativo para que as mudanças tenham efeito. Isso se aplica tanto à filtragem no servidor quanto à filtragem no cliente.
NotaA liberação canário de mensagens é um sub-recurso da liberação canário de ponta a ponta. Para obter melhores resultados, configure também os recursos relacionados à liberação canário de ponta a ponta.
Configurar consumidores de mensagens canário
Por padrão, tanto os consumidores de base quanto os canário recebem mensagens canário. Para restringir as mensagens canário apenas aos consumidores canário, desmarque a caixa de seleção Baseline Consumer da tag correspondente.
Após essa alteração, os consumidores de base processarão apenas mensagens de base e quaisquer mensagens canário para as quais o consumidor de base esteja explicitamente selecionado.
Faça login no console do MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Governance > Application Governance.
Na página Application list, clique em no cartão de recursos do aplicativo desejado. No painel de navegação à esquerda, clique em Traffic management.
Clique em na aba Message grayscale.
Na seção Message Canary Release Configuration, clique em Edit. Desmarque a caixa de seleção Baseline Consumer da tag correspondente e clique em OK.
As alterações nas regras de consumo entram em vigor dinamicamente, sem necessidade de reiniciar o aplicativo. No entanto, se todos os consumidores canário ficarem offline enquanto a caixa de seleção Baseline Consumer estiver desmarcada, as mensagens canário com essa tag não serão consumidas.
Fluxos de trabalho de liberação canário
Consumidores canário permanentes
Adote este fluxo de trabalho quando os consumidores canário forem executados continuamente junto com os consumidores de base. Uma única configuração mantém as mensagens canário roteadas para consumidores canário e as mensagens de base roteadas para consumidores de base.
Se suas mensagens não forem idempotentes, garanta que os consumidores canário e de base processem apenas suas respectivas mensagens. Siga as etapas abaixo.
Antes de começar, verifique se você tem:
Tanto o produtor de mensagens quanto os aplicativos consumidores conectados à governança de microsserviços
Liberação canário de mensagens ativada e todos os nós do aplicativo reiniciados
Etapas:
Configure a regra de consumo para o aplicativo consumidor. Para a tag canário, desmarque a caixa de seleção Baseline Consumer.
Aguarde de 1 a 3 minutos para que a relação de assinatura no lado do RocketMQ seja atualizada.
Coloque os nós consumidores canário online.
Coloque os nós produtores canário online para começar a enviar mensagens canário.
Consumidores canário dinâmicos
Use este fluxo de trabalho quando os nós canário forem temporários e vinculados a uma iteração específica de lançamento. Como os consumidores canário podem ficar offline após a verificação, ajuste a filtragem dos consumidores de base para evitar acúmulo ou perda de mensagens.
Procedimento de lançamento:
Configure a regra de consumo para o aplicativo consumidor. Para a tag canário, desmarque a caixa de seleção Baseline Consumer para que as mensagens canário sejam consumidas apenas pelos consumidores canário. Aguarde de 1 a 3 minutos para que a relação de assinatura no lado do RocketMQ seja atualizada.
Coloque os nós consumidores canário online.
Envie mensagens canário a partir dos nós produtores canário.
Verifique as mensagens canário.
Retire os nós produtores canário do ar.
-
Compare os offsets dos grupos de consumidores. Verifique se o
offsetdoconsumer_groupde base é menor ou igual aooffsetdoconsumer_groupcanário. Use logs e monitoramento para confirmar que todas as mensagens canário foram consumidas.ImportanteSe o offset do
consumer_groupde base for menor ou igual ao offset doconsumer_groupcanário, os consumidores de base poderão assumir com segurança quaisquer mensagens canário restantes. Algumas mensagens podem ser consumidas duas vezes — certifique-se de que sua lógica de negócios lide com idempotência.Se o offset de base for maior que o offset canário, prosseguir para a próxima etapa causará a perda de mensagens canário. Aguarde até que os offsets se alinhem.
Reative o consumo de base. Para a tag canário, marque a caixa de seleção Baseline Consumer para que os consumidores de base possam processar quaisquer mensagens canário restantes. Aguarde de 1 a 3 minutos para que a relação de assinatura seja atualizada.
-
Retire os nós consumidores canário do ar e exclua o
consumer_groupcanário.ImportanteSe você não excluir o
consumer_groupcanário, as mensagens se acumularão nesse grupo. Na próxima vez que os consumidores canário entrarem online, eles retomarão o consumo a partir do último offset registrado, e não da posição mais recente.