Biblioteca de clientes de teste do Azure Cosmos para Java – versão 1.0.0-beta.6
Biblioteca que contém classes principais de injeção de falha usadas para testar bibliotecas do SDK do Azure Cosmos DB.
Introdução
Incluir o pacote
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos-test</artifactId>
<version>1.0.0-beta.6</version>
</dependency>
Pré-requisitos
- JDK (Java Development Kit) com a versão 8 ou superior
- Uma conta ativa do Azure. Se não tiver uma, você poderá se inscrever em uma conta gratuita. Como alternativa, você pode usar o Emulador do Azure Cosmos DB para desenvolvimento e teste. Como o certificado HTTPS do emulador é autoassinado, você precisa importar seu certificado para o repositório de certificado confiável java, conforme explicado aqui
- (Opcional) SLF4J é uma fachada de registro em log.
- (Opcional) A associação SLF4J é usada para associar uma estrutura de registro em log específica ao SLF4J.
- (Opcional) Maven
O SLF4J só será necessário se você planejar usar o registro em log. Baixe também uma associação SLF4J que vinculará a API SLF4J à implementação do registro em log de sua escolha. Para obter mais informações, confira o Manual do usuário do SLF4J.
O SDK fornece APIs assíncronas baseadas no Reactor Core. Você pode ler mais sobre os tipos Reactor Core e Flux/Mono aqui
Principais conceitos
A biblioteca de Teste do Azure Cosmos pode ser usada para injetar falha no SDK do Azure Cosmos para Java.
Exemplos
A seção a seguir fornece vários snippets de código que abordam como criar alguns dos cenários de injeção de falha mais comuns, incluindo:
- Cenário de aquisição de canal alto
- Cenário de conexão interrompida
- Cenário de retorno do servidor
- Cenário de fechamento de conexão aleatória
Cenário de aquisição de canal alto
FaultInjectionRule serverConnectionDelayRule =
new FaultInjectionRuleBuilder("<YOUR RULE ID>")
.condition(
new FaultInjectionConditionBuilder()
.operationType(FaultInjectionOperationType.CREATE_ITEM)
.build()
)
.result(
FaultInjectionResultBuilders
.getResultBuilder(FaultInjectionServerErrorType.CONNECTION_DELAY)
.delay(Duration.ofSeconds(6)) // default connection timeout is 5s
.times(1)
.build()
)
.duration(Duration.ofMinutes(5))
.build();
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(serverConnectionDelayRule)).block();
Cenário de conexão interrompida
FaultInjectionRule timeoutRule =
new FaultInjectionRuleBuilder("<YOUR RULE ID>")
.condition(
new FaultInjectionConditionBuilder()
.operationType(FaultInjectionOperationType.READ_ITEM)
.build()
)
.result(
FaultInjectionResultBuilders
.getResultBuilder(FaultInjectionServerErrorType.RESPONSE_DELAY)
.times(1)
.delay(Duration.ofSeconds(6)) // the default time out is 5s
.build()
)
.duration(Duration.ofMinutes(5))
.build();
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(timeoutRule)).block();
Cenário de retorno do servidor
FaultInjectionRule serverErrorRule =
new FaultInjectionRuleBuilder("<YOUR RULE ID>")
.condition(
new FaultInjectionConditionBuilder()
.operationType(FaultInjectionOperationType.READ_ITEM)
.build()
)
.result(
FaultInjectionResultBuilders
.getResultBuilder(FaultInjectionServerErrorType.GONE)
.times(1)
.build()
)
.duration(Duration.ofMinutes(5))
.build();
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(serverErrorRule)).block();
Cenário de fechamento de conexão aleatória
FaultInjectionRule connectionErrorRule =
new FaultInjectionRuleBuilder("<YOUR RULE ID>")
.condition(
new FaultInjectionConditionBuilder()
.operationType(FaultInjectionOperationType.CREATE_ITEM)
.endpoints(new FaultInjectionEndpointBuilder(FeedRange.forLogicalPartition(new PartitionKey("<YOUR PARTITION KEY>"))).build())
.build()
)
.result(
FaultInjectionResultBuilders
.getResultBuilder(FaultInjectionConnectionErrorType.CONNECTION_CLOSE)
.interval(Duration.ofSeconds(1))
.threshold(1.0)
.build()
)
.duration(Duration.ofSeconds(2))
.build();
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(connectionErrorRule)).block();
Solução de problemas
Geral
O Azure Cosmos DB é um banco de dados distribuído rápido e flexível que pode ser dimensionado perfeitamente com garantia de latência e produtividade. Você não precisa fazer alterações importantes de arquitetura nem escrever um código complexo para dimensionar seu banco de dados com o Azure Cosmos DB. Aumentar e reduzir é tão fácil quanto fazer uma única chamada à API ou uma chamada ao método do SDK. No entanto, como o Azure Cosmos DB é acessado por meio de chamadas de rede, há otimizações do lado do cliente que você pode fazer para obter o desempenho máximo ao usar o SDK do Java v4 do Azure Cosmos DB.
O guia de desempenho aborda essas otimizações do lado do cliente.
O Guia de solução de problemas aborda problemas comuns, soluções alternativas, etapas de diagnóstico e ferramentas quando você usa o SDK do Java v4 do Azure Cosmos DB com contas da API do SQL do Azure Cosmos DB.
Habilitar o Registro em log do Cliente
Próximas etapas
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder e de fato concede, os direitos de usar sua contribuição.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.
Azure SDK for Java