Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/
Data Encryption Workshop/
Melhores práticas/
Geral/
Repetição de solicitações do DEW com falha usando retirada exponencial
Atualizado em 2024-09-14 GMT+08:00
Repetição de solicitações do DEW com falha usando retirada exponencial
Cenário
Se você receber uma mensagem de erro ao chamar uma API, poderá usar a retirada exponencial para repetir a solicitação.
Como funciona
Se erros consecutivos (como erros de limitação de tráfego) forem relatados pelo lado do serviço, o acesso contínuo continuará causando conflitos. A retirada exponencial pode ajudá-lo a evitar tais erros.
Restrições
A conta atual tem uma chave ativada.
Exemplo
- Prepare informações básicas de autenticação.
- ACCESS_KEY: chave de acesso da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- SECRET_ACCESS_KEY: chave de acesso de segredo da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- PROJECT_ID: ID do projeto do site. Para obter detalhes, consulte Obtenção de um ID de projeto.
- KMS_ENDPOINT: ponto de extremidade para acessar o KMS. Para obter detalhes, consulte Pontos de extremidade.
- Haverá riscos de segurança se a AK/SK usada para autenticação for gravada diretamente no código. Criptografe a AK/SK no arquivo de configuração ou nas variáveis de ambiente para armazenamento.
- Neste exemplo, a AK/SK armazenada nas variáveis de ambiente é usada para autenticação de identidade. Configure as variáveis de ambiente HUAWEICLOUD_SDK_AK e HUAWEICLOUD_SDK_SK primeiro no ambiente local.
- Código para retirada exponencial:
import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.kms.v2.model.EncryptDataRequest; import com.huaweicloud.sdk.kms.v2.model.EncryptDataRequestBody; import com.huaweicloud.sdk.kms.v2.KmsClient; public class KmsEncryptExample { private static final String ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_AK"); private static final String SECRET_ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_SK"); private static final String KMS_ENDPOINT = "xxxx"; private static final String KEY_ID = "xxxx"; private static final String PROJECT_ID = "xxxx"; private static KmsClient KmsClientInit() { ICredential auth = new BasicCredentials() .withAk(ACCESS_KEY) .withSk(SECRET_ACCESS_KEY) .withProjectId(PROJECT_ID); return KmsClient.newBuilder() .withCredential(auth) .withEndpoint(KMS_ENDPOINT) .build(); } public static long getWaitTime(int retryCount) { long initialDelay = 200L; return (long) (Math.pow(2, retryCount) * initialDelay); } public static void encryptData(KmsClient client, String plaintext) { EncryptDataRequest request = new EncryptDataRequest().withBody( new EncryptDataRequestBody() .withKeyId(KEY_ID) .withPlainText(plaintext)); client.encryptData(request); } public static void main(String[] args) { int maxRetryTimes = 6; String plaintext = "plaintext"; String errorMsg = "The throttling threshold has been reached"; KmsClient client = KmsClientInit(); for (int i = 0; i < maxRetryTimes; i++) { try { encryptData(client, plaintext); return; } catch (ClientRequestException e) { if (e.getErrorMsg().contains(errorMsg)) { try { Thread.sleep(getWaitTime(i)); } catch (InterruptedException ex) { throw new RuntimeException(ex); } } } } } }
Tópico principal: Geral
Feedback
Esta página foi útil?
Deixar um comentário
Obrigado por seus comentários. Estamos trabalhando para melhorar a documentação.
O sistema está ocupado. Tente novamente mais tarde.