Definir configurações para o componente Eureka Server for Spring em Aplicativos de Contêiner do Azure (versão prévia)

O Eureka Server for Spring é um mecanismo para descoberta centralizada de serviços para microsserviços. Use as orientações a seguir para aprender como configurar e gerenciar seu componente Eureka Server for Spring.

Mostrar

Você pode visualizar os detalhes de um componente individual por nome usando o comando show.

Antes de executar o comando a seguir, substitua os espaços reservados entre <> pelos seus valores.

az containerapp env java-component eureka-server-for-spring show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

Lista

Você pode listar todos os componentes Java registrados usando o comando list.

Antes de executar o comando a seguir, substitua os espaços reservados entre <> pelos seus valores.

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Desassociar

Para remover uma associação de um aplicativo de contêiner, use a opção --unbind .

Antes de executar o comando a seguir, substitua os espaços reservados entre <> pelos seus valores.

az containerapp update \
  --name <APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Lista de configuração permitida para o Eureka Server for Spring

A lista a seguir detalha as configurações suportadas. Você pode encontrar mais detalhes em Spring Cloud Eureka Server.

Observação

Envie tickets de suporte para solicitações de novos recursos.

Opções de configuração

O comando az containerapp update usa o parâmetro --configuration para controlar como o Eureka Server for Spring é configurado. Você pode usar vários parâmetros ao mesmo tempo, desde que estejam separados por um espaço. Você pode encontrar mais detalhes nos documentos do Spring Cloud Eureka Server.

As definições de configuração a seguir estão disponíveis na propriedade de configuração eureka.server.

Nome Descrição Valor padrão
eureka.server.enable-self-preservation Quando habilitado, o servidor controla o número de renovações que deve receber do servidor. A qualquer momento, o número de renovações cai abaixo da porcentagem limite definida por eureka.server.renewal-percent-threshold. O valor padrão é definido como true no servidor Eureka original, mas no componente Java do Servidor Eureka, o valor padrão é definido como false. Confira Limitações do componente Java do Eureka Server for Spring false
eureka.server.renewal-percent-threshold A porcentagem mínima de renovações esperadas dos clientes no período especificado por eureka.server.renewal-threshold-update-interval-ms. Se as renovações ficarem abaixo do limite, as expirações serão desabilitadas se o eureka.server.enable-self-preservation estiver habilitado. 0.85
eureka.server.renewal-threshold-update-interval-ms O intervalo com o qual o limite conforme especificado em eureka.server.renewal-percent-threshold precisa ser atualizado. 0
eureka.server.expected-client-renewal-interval-seconds O intervalo com o qual se espera que os clientes enviem as pulsações. O padrão é 30 segundos. Se os clientes enviarem pulsações com uma frequência diferente, digamos, a cada 15 segundos, esse parâmetro deverá ser ajustado de acordo. Caso contrário, a autopreservação não funcionará conforme o esperado. 30
eureka.server.response-cache-auto-expiration-in-seconds Obtém o tempo para o qual a carga do registro deve ser mantido no cache, se não for invalidado pelos eventos de alteração. 180
eureka.server.response-cache-update-interval-ms Obtém o intervalo de tempo com o qual o cache de carga do cliente deve ser atualizado. 0
eureka.server.use-read-only-response-cache No momento, o com.netflix.eureka.registry.ResponseCache usa uma estratégia de cache de dois níveis para respostas. Um cache readWrite com uma política de expiração e um cache readonly que armazena em cache sem expirar. true
eureka.server.disable-delta Verifica se as informações delta podem ser fornecidas ao cliente. false
eureka.server.retention-time-in-m-s-in-delta-queue Obtenha o tempo pelo qual as informações delta devem ser armazenadas em cache para que os clientes recuperem o valor, sem que seja perdido. 0
eureka.server.delta-retention-timer-interval-in-ms Obtenha o intervalo de tempo com o qual a tarefa de limpeza deve ser ativada e verifique se há informações delta expiradas. 0
eureka.server.eviction-interval-timer-in-ms Obtenha o intervalo de tempo com o qual a tarefa que expira instâncias deve ser ativada e executada. 60000
eureka.server.sync-when-timestamp-differs Verifica se as instâncias devem ser sincronizadas quando o carimbo de data/hora for diferente. true
eureka.server.rate-limiter-enabled Indica se o limitador de taxa deve ser habilitado ou desabilitado. false
eureka.server.rate-limiter-burst-size Limitador de taxa, propriedade do algoritmo de token bucket. 10
eureka.server.rate-limiter-registry-fetch-average-rate Limitador de taxa, propriedade do algoritmo de token bucket. Especifica a taxa média de solicitação aplicada. 500
eureka.server.rate-limiter-privileged-clients Uma lista de clientes certificados. Essa lista é adicional aos clientes Eureka Java padrão. N/D
eureka.server.rate-limiter-throttle-standard-clients Indica se a taxa limita clientes padrão. Se definida como false, somente clientes não padrão serão limitados por taxa. false
eureka.server.rate-limiter-full-fetch-average-rate Limitador de taxa, propriedade do algoritmo de token bucket. Especifica a taxa média de solicitação aplicada. 100

Configurações comuns

  • registrando configurações relacionadas
    • logging.level.*
    • logging.group.*
    • Quaisquer outras configurações no namespace logging.* devem ser proibidas, por exemplo, gravar arquivos de log usando logging.file deve ser proibido.

Chamada entre aplicativos

Este exemplo mostra como escrever código Java para fazer chamadas entre aplicativos registrados com o componente Eureka Server for Spring. Quando os aplicativos contêineres estão vinculados ao Eureka, eles se comunicam entre si por meio do servidor Eureka.

O exemplo cria dois aplicativos, um chamador e um receptor. Ambos os aplicativos se comunicam entre si usando o componente Eureka Server for Spring. O aplicativo chamado expõe um terminal que é chamado pelo aplicativo chamador.

  1. Crie o aplicativo chamado. Habilite o cliente Eureka em seu aplicativo Spring Boot adicionando a anotação @EnableDiscoveryClient à sua classe principal.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(CalleeApplication.class, args);
    	}
    }
    
  2. Crie um terminal no aplicativo chamado que é chamado pelo aplicativo chamador.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Defina o nome do aplicativo chamado no arquivo de configuração do aplicativo. Por exemplo, application.yml.

    spring.application.name=callee
    
  4. Crie o aplicativo chamador.

    Adicione a anotação @EnableDiscoveryClient para habilitar a funcionalidade do cliente Eureka. Além disso, crie um bean WebClient.Builder com a anotação @LoadBalanced para realizar chamadas com balanceamento de carga para outros serviços.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CallerApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(CallerApplication.class, args);
    	}
    
    	@Bean
    	@LoadBalanced
    	public WebClient.Builder loadBalancedWebClientBuilder() {
    		return WebClient.builder();
    	}
    }
    
  5. Crie um controlador no aplicativo chamador que use o WebClient.Builder para chamar o aplicativo chamado usando seu nome de aplicativo, chamado.

    @RestController
    public class CallerController { 
        @Autowired
        private WebClient.Builder webClientBuilder;
    
        @GetMapping("/call-callee")
        public Mono<String> callCallee() {
            return webClientBuilder.build()
                .get()
                .uri("http://callee/call")
                .retrieve()
                .bodyToMono(String.class);
        }
    }
    

Agora você tem um aplicativo chamador e um receptor que se comunicam entre si usando componentes Java do Eureka Server for Spring. Certifique-se de que ambos os aplicativos estejam em execução e vinculados ao servidor Eureka antes de testar o ponto de extremidade /call-callee no aplicativo chamador.

Limitações

  • O componente Java do Eureka Server vem com uma configuração padrão, eureka.server.enable-self-preservation, definida como false. Essa configuração padrão ajuda a evitar momentos em que as instâncias não são excluídas depois que a autopreservação é habilitada. Se as instâncias forem excluídas muito cedo, algumas solicitações poderão ser direcionadas para instâncias inexistentes. Se desejar alterar essa configuração para true, você poderá substituí-la definindo suas próprias configurações no componente Java.

  • O servidor Eureka possui apenas uma única réplica e não suporta escalonamento, tornando o recurso do servidor Eureka par indisponível.

  • O painel Eureka não está disponível.

Próximas etapas