Tutorial: Conectar-se a um servidor Eureka gerenciado para Spring em aplicativos de contêiner do Azure
O Eureka Server for Spring é um registo de serviços que permite aos microsserviços registarem-se e descobrirem outros serviços. O Eureka Server for Spring está disponível como um componente do Azure Container Apps. Pode associar a sua aplicação de contentores ao Eureka Server for Spring para registo automático no servidor Eureka.
Neste tutorial, irá aprender a:
- Crie um componente Eureka Server for Spring Java.
- Associe seu aplicativo de contêiner ao componente Java do Eureka Server for Spring.
Importante
Este tutorial usa serviços que podem afetar sua fatura do Azure. Se você decidir acompanhar, certifique-se de excluir os recursos apresentados neste artigo para evitar cobranças inesperadas.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Se ainda não tiver um, pode criar um gratuitamente.
- CLI do Azure.
Considerações
Ao executar o Eureka Server for Spring em aplicativos de contêiner, esteja ciente dos seguintes detalhes:
Item | Explicação |
---|---|
Âmbito | O componente Eureka Server for Spring é executado no mesmo ambiente que o aplicativo de contêiner conectado. |
Dimensionamento | O componente Eureka Server for Spring não pode ser dimensionado. As propriedades minReplicas de dimensionamento e maxReplicas estão ambas definidas como 1 . Para obter alta disponibilidade, consulte Criar um serviço Eureka altamente disponível em aplicativos de contêiner. |
Recursos | A alocação de recursos de contêiner para o Eureka Server for Spring é fixa. O número de núcleos da CPU é 0.5 e o tamanho da memória é 1 Gi. |
Preços | O Eureka Server for Spring billing enquadra-se nos preços baseados no consumo. Os recursos consumidos pelos componentes Java gerenciados são cobrados pelas taxas ativas/ociosas. Você pode excluir componentes que não estão mais em uso para interromper a cobrança. |
Enlace | Os aplicativos de contêiner se conectam a um componente do Eureka Server for Spring por meio de uma ligação. As associações injetam configurações em variáveis de ambiente do aplicativo de contêiner. Depois que uma associação é estabelecida, o aplicativo contêiner pode ler os valores de configuração das variáveis de ambiente e conectar-se ao componente Eureka Server for Spring. |
Configurar
Antes de começar a trabalhar com o componente Eureka Server for Spring, primeiro você precisa criar os recursos necessários.
Execute os comandos a seguir para criar seu grupo de recursos em um ambiente de aplicativo de contêiner.
Crie variáveis para dar suporte à configuração do aplicativo. Esses valores são fornecidos para você para os fins desta lição.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_NAME=eureka export APP_NAME=my-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
Variável Description LOCATION
O local da região do Azure onde você cria seu aplicativo de contêiner e o componente Java. ENVIRONMENT
O nome do ambiente do aplicativo de contêiner para seu aplicativo de demonstração. RESOURCE_GROUP
O nome do grupo de recursos do Azure para seu aplicativo de demonstração. EUREKA_COMPONENT_NAME
O nome do componente Java criado para seu aplicativo de contêiner. Nesse caso, você cria um componente Eureka Server for Spring Java. IMAGE
A imagem de contêiner usada em seu aplicativo de contêiner. Entre no Azure com a CLI do Azure.
az login
Crie um grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATION
Crie seu ambiente de aplicativo de contêiner.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Criar o componente Eureka Server for Spring Java
Agora que você tem um ambiente existente, você pode criar seu aplicativo de contêiner e vinculá-lo a uma instância de componente Java do Eureka Server for Spring.
Crie o componente Eureka Server for Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
Opcional: Atualize o servidor Eureka para a configuração do componente Java Spring.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
Vincular seu aplicativo de contêiner ao componente Java do Eureka Server for Spring
Crie o aplicativo de contêiner e vincule-o ao componente Eureka Server for Spring.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --bind $EUREKA_COMPONENT_NAME \ --query properties.configuration.ingress.fqdn
Copie o URL do seu aplicativo para um editor de texto para que você possa usá-lo em uma próxima etapa.
Retorne ao aplicativo de contêiner no portal. Copie o URL do seu aplicativo para um editor de texto para que você possa usá-lo em uma próxima etapa.
Vá para a /allRegistrationStatus
rota para ver todos os aplicativos registrados no componente Eureka Server for Spring.
A associação injeta várias configurações no aplicativo como variáveis de ambiente, principalmente a eureka.client.service-url.defaultZone
propriedade. Esta propriedade indica o ponto de extremidade interno do componente Java do Eureka Server.
A ligação também injeta as seguintes propriedades:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
A eureka.client.register-with-eureka
propriedade está configurada para true
impor o registo no servidor Eureka. Esse registro substitui a configuração local no application.properties
, do servidor de configuração e assim por diante. Se quiser defini-lo como false
, você pode substituí-lo definindo uma variável de ambiente em seu aplicativo de contêiner.
A eureka.instance.prefer-ip-address
propriedade é definida como true
devido à regra de resolução do sistema de nome de domínio específica no ambiente do aplicativo de contêiner. Não modifique esse valor para não quebrar a ligação.
Opcional: Desvincule seu aplicativo contêiner do componente Java do Eureka Server for Spring
Para remover uma associação de um aplicativo contêiner, use a --unbind
opção.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Visualize o aplicativo através de um painel
Importante
Para exibir o painel, você precisa ter pelo menos a Microsoft.App/managedEnvironments/write
função atribuída à sua conta no recurso de ambiente gerenciado. Você pode atribuir explicitamente a Owner
função ou Contributor
no recurso. Você também pode seguir as etapas para criar uma definição de função personalizada e atribuí-la à sua conta.
Crie uma definição de função personalizada.
az role definition create --role-definition '{ "Name": "<YOUR_ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'
Certifique-se de substituir o
AssignableScopes
espaço reservado<SUBSCRIPTION_ID>
no valor pelo seu ID de assinatura.Atribua a função personalizada à sua conta em um recurso de ambiente gerenciado.
Obtenha a ID do recurso do ambiente gerenciado:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Atribua a função à sua conta.
Antes de executar esse comando, substitua os espaços reservados - indicados pelos colchetes - pelo ID da entidade de usuário ou serviço e pelo nome da
<>
função.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID
Nota
O
<USER_OR_SERVICE_PRINCIPAL_ID>
valor geralmente deve ser a identidade que você usa para acessar o portal do Azure. O<ROLE_NAME>
valor é o nome que você atribuiu na etapa 1.Obtenha o URL do painel do Eureka Server for Spring.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsv
Este comando devolve o URL que pode utilizar para aceder ao painel do Eureka Server for Spring. Com o painel, você também pode ver seu aplicativo de contêiner, conforme mostrado na captura de tela a seguir.
Opcional: Integrar os componentes Eureka Server for Spring e Admin for Spring Java
Se quiser integrar os componentes Java do Eureka Server for Spring e Admin for Spring, consulte Integrar o Admin gerenciado do Spring ao Eureka Server for Spring.
Clean up resources (Limpar recursos)
Os recursos criados neste tutorial têm um efeito na sua fatura do Azure. Se você não vai usar esses serviços a longo prazo, execute o seguinte comando para remover tudo o que você criou neste tutorial.
az group delete --resource-group $RESOURCE_GROUP
Lista de configuração permitida para o seu Eureka Server for Spring
As seções a seguir descrevem as configurações suportadas. Para obter mais informações, consulte Spring Cloud Eureka Server.
Nota
Envie tíquetes de suporte para novas solicitações de recursos.
Opções de configuração
O az containerapp update
comando usa o --configuration
parâmetro para controlar como o Eureka Server for Spring está configurado. Você pode usar vários parâmetros ao mesmo tempo, desde que estejam separados por um espaço. Para obter mais informações, consulte Spring Cloud Eureka Server.
As seguintes definições de configuração estão disponíveis na eureka.server
propriedade de configuração:
Nome | Descrição | Default value |
---|---|---|
eureka.server.enable-self-preservation |
Quando ativado, o servidor controla o número de renovações que deve receber do servidor. Sempre que o número de renovações descer abaixo da percentagem limite definida pela eureka.server.renewal-percent-threshold . O valor padrão é definido como true no servidor Eureka original, mas no componente Java do Eureka Server, o valor padrão é definido como false . Consulte Limitações do componente Eureka Server for Spring Java. |
false |
eureka.server.renewal-percent-threshold |
A percentagem mínima de renovações que se espera dos clientes no período especificado pela eureka.server.renewal-threshold-update-interval-ms . Se as renovações caírem abaixo do limite, as expirações serão desativadas se eureka.server.enable-self-preservation estiver habilitado. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
O intervalo com o qual o limiar - 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 os seus batimentos cardíacos. O padrão é de 30 segundos. Se os clientes enviarem batimentos cardíacos com frequência diferente, digamos, a cada 15 segundos, esse parâmetro deve ser ajustado de acordo, caso contrário, a autopreservação não funcionará como esperado. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Obtém o tempo durante o qual a carga útil do Registro deve ser mantida no cache se não for invalidada por 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 |
O com.netflix.eureka.registry.ResponseCache atualmente usa uma estratégia de cache de dois níveis para respostas. Um readWrite cache com uma política de expiração e um readonly cache que armazena em cache sem expirar. |
true |
eureka.server.disable-delta |
Verifica se as informações do delta podem ser fornecidas ao cliente ou não. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Obtenha o tempo durante o qual as informações delta devem ser armazenadas em cache para que os clientes recuperem o valor sem perdê-lo. | 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 as 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 é diferente. | true |
eureka.server.rate-limiter-enabled |
Indica se o limitador de taxa deve ser ativado ou desativado. | false |
eureka.server.rate-limiter-burst-size |
Limitador de taxa, propriedade do algoritmo do bucket de token. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Limitador de taxa, propriedade do algoritmo do bucket de token. Especifica a taxa média de solicitação imposta. | 500 |
eureka.server.rate-limiter-privileged-clients |
Uma lista de clientes certificados. Isto é em adição aos clientes Java eureka padrão. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Indique se a taxa limita os clientes padrão. Se definido como false , apenas clientes não padrão têm taxa limitada. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Limitador de taxa, propriedade do algoritmo do bucket de token. Especifica a taxa média de solicitação imposta. | 100 |
Configurações comuns
- Configurações relacionadas ao registro:
logging.level.*
logging.group.*
- Quaisquer outras configurações sob o
logging.*
namespace devem ser proibidas - por exemplo, escrever arquivos de log usandologging.file
deve ser proibido.
Chamada entre aplicativos
Este exemplo mostra como escrever código Java para chamar entre aplicativos registrados no componente Eureka Server for Spring. Quando as aplicações de contentor estão ligadas ao Eureka, comunicam entre si através do servidor Eureka.
O exemplo cria dois aplicativos, um chamador e um destinatário. Ambos os aplicativos se comunicam entre si usando o componente Eureka Server for Spring. O aplicativo callee expõe um ponto de extremidade que é chamado pelo aplicativo chamador.
Crie o aplicativo de destinatário. Habilite o cliente Eureka em seu aplicativo Spring Boot adicionando a
@EnableDiscoveryClient
anotação à sua classe principal.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
Crie um ponto de extremidade no aplicativo do destinatário que é chamado pelo aplicativo chamador.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Defina o nome do aplicativo destinatário no arquivo de configuração do aplicativo - por exemplo, no application.yml.
spring.application.name=callee
Crie o aplicativo chamador.
Adicione a anotação para ativar a
@EnableDiscoveryClient
funcionalidade do cliente Eureka. Além disso, crie umWebClient.Builder
bean com a@LoadBalanced
anotação para executar 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(); } }
Crie um controlador no aplicativo chamador que usa o
WebClient.Builder
para chamar o aplicativo destinatário usando seu nome de aplicativo, callee.@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 callee que se comunicam entre si usando componentes Java do Eureka Server for Spring. Certifique-se de que ambas as aplicações estão em execução e se ligam ao servidor Eureka antes de testar o /call-callee
ponto de extremidade na aplicação chamadora.
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 é ativada. Se as instâncias forem excluídas muito cedo, algumas solicitações poderão ser direcionadas para instâncias inexistentes. Se você quiser alterar essa configuração para true
, você pode substituí-la definindo suas próprias configurações no componente Java.
Próximos passos
Conteúdos relacionados
Integre o Admin gerenciado para o Spring com o Eureka Server for Spring