Na liberação canary de ponta a ponta do Microservices Engine (MSE), as tags de tráfego canary são propagadas durante os processos de chamada das requisições. Em algumas tarefas assíncronas não suportadas nativamente, essa propagação pode ser interrompida, causando falhas no processamento do tráfego canary. Por padrão, o MSE permite a propagação de tags em tarefas assíncronas criadas com a anotação @Async do Spring. Além disso, é possível personalizar tarefas assíncronas para garantir a propagação das tags de tráfego adicionando pacotes de varredura para passagem assíncrona.
Pré-requisitos
É necessário utilizar o probe do MSE V3.2.0 ou superior (versão de prévia pública). Para atualizar o probe do MSE, participe do grupo DingTalk do MSE (ID: 43525005207).
Para consultar a versão do probe do MSE, execute o seguinte comando:
cat /home/admin/.opt/ArmsAgent/version
Método 1: Utilize a anotação @Async do Spring
Por padrão, o MSE suporta a propagação assíncrona de tags em tarefas criadas com a anotação @Async do Spring. O MSE aprimora automaticamente os seguintes executores e tarefas padrão do Spring:
-
Executores:
org.springframework.scheduling.concurrent.ConcurrentTaskExecutor
org.springframework.core.task.SimpleAsyncTaskExecutor
org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor
org.springframework.core.task.support.TaskExecutorAdapter
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
org.springframework.jca.work.WorkManagerTaskExecutor
org.springframework.scheduling.commonj.WorkManagerTaskExecutor
-
Tarefas:
org.springframework.aop.interceptor.AsyncExecutionInterceptor$1
org.springframework.aop.interceptor.AsyncExecutionInterceptor$$Lambda$
Método 2: Adicione um pacote de varredura para passagem assíncrona
Em aplicações Java, adicione variáveis de ambiente ou parâmetros de inicialização Java para ativar a capacidade de passagem assíncrona de pacotes de varredura. Isso garante a propagação das tags de tráfego em tarefas assíncronas. As interfaces Runnable, Callable ou Supplier envolvidas capturam automaticamente o contexto do processo de chamada da thread atual no momento da criação de novos objetos. Ao utilizar threads em modo assíncrono, o contexto do processo de chamada viabiliza a propagação de ponta a ponta da tag de tráfego canary.
-Dprofiler.thread.match.package="com.alibaba.mse.brightroar.console.service"
Para adicionar múltiplos pacotes de varredura para passagem assíncrona, separe os nomes dos pacotes por vírgulas (,).
Por exemplo, utilize um pacote de varredura para passagem assíncrona a fim de monitorar a tarefa assíncrona criada pelo código de amostra abaixo. O nome completo do pacote de varredura de amostra é com.alibaba.mse.brightroar.console.service.
Ao adicionar o pacote de varredura para passagem assíncrona nas configurações da sua aplicação, ajuste o nome do pacote conforme suas necessidades de negócio. Caso precise monitorar um grande volume de tarefas assíncronas, especifique o prefixo do nome do pacote em vez do nome completo. Neste exemplo, insira o nome completo com.alibaba.mse.brightroar.console.service ou apenas o prefixo com.alibaba.mse. Se optar pelo prefixo, todos os pacotes de varredura para passagem assíncrona neste diretório serão analisados. No entanto, prefixos muito curtos podem abranger uma quantidade excessiva de pacotes, resultando em degradação de desempenho. Tenha cautela ao especificar o nome do pacote.
package com.alibaba.mse.brightroar.console.service;
@Service
public class NameService {
private ExecutorService es = Executors.newFixedThreadPool(5);
public void name() {
es.submit(new Runnable() {
@Override
public void run() {
System.out.println(System.currentTimeMillis()+ ": my name is john, " + Thread.currentThread().getId());
}
});
}
}
Instruções
Leia o documento em inglês para compreender O QUE precisa ser comunicado
Escreva o conteúdo em português do Brasil DO ZERO — esqueça a estrutura das frases em inglês
Preserve toda a formatação markdown, blocos de código, links e imagens exatamente como estão
Tags xref (
<a data-tag="xref" ...>texto</a>) — preserve A TAG INTEIRA com todos os atributos na ordem e caixa originais, traduza APENAS o texto visível entre > eAplique todas as regras específicas de idioma rigorosamente
Aplique as regras de stopwords com tolerância zero
Use o modo imperativo em passos numerados e listas de procedimentos
Garanta a consistência terminológica — mesmo termo = mesma tradução em todo o documento
Varie os inícios de frase em listas/tabelas — nenhum iniciador repetido mais de 3 vezes
Retorne APENAS o documento markdown em português do Brasil, sem explicações