- Criação do Centro de Registro de Serviços (Spring Cloud Netflix Eureka)
Crie um projeto principal Maven
Em seguida, crie dois módulos:
- Um como servdior de registro Eureka
- Outro como cliente Eureka
Configuração do Servidor Eureka
Iniciando o centro de registro
Adicionando autenticação ao Eureka
Primeiro, adicione a dependência de segurança ao servidor Eureka (eureka-server):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Segundo, configure o arquivo applicatoin.yml:
### Porta do servidor
server:
port: 8100
### Nome do serviço
spring:
application:
name: app-eureka-center
security:
basic:
enable: true # Ativa autenticação HTTP basic (não necessário em versões recentes)
user: # Configura credenciais
name: usuario
password: senha123
eureka:
instance:
# Endereço do centro de registro
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:8100/eureka/
register-with-eureka: false
fetch-registry: true
Terceiro, implemente uma classe de segurança:
package com.exemplo.eureka;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
@Configuration
@EnableWebSecurity
public class SegurancaConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
http.csrf().disable();
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
Quarto, reinicie o servidor Eureka para testes
Configuração do Cliente Eureka
- Processo de criação: padrão
Para clientes conectando a Eureka com autenticação, ajuste a URL:
http://usuario:senha@IP:porta/eureka
Exemplo: http://usuario:senha123@127.0.0.1:8100/eureka
Para clusters múltiplos, configure várias URLs no defaultZone:
defaultZone: http://usuario:senha123@127.0.0.1:8100/eureka/,http://usuario:senha123@127.0.0.1:9100/eureka/
Modo de Proteção do Eureka
Quando o Eureka entra no modo de proteção (desconecte o cliente após iniciar servidor e cliente), ele mantém serviços offline para evitar remoção acidental. Para desativar:
eureka:
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 15000
Desativando a proteção, serviços offline serão removidos automaticamente.
Cluster de Alta Disponibilidade
Para criar um cluster, configure múltiplos servidores Eureka com registros mútuos.
Exemplo de configuração para servidor na porta 8100:
server:
port: 8100
spring:
application:
name: eureka-cluster
security:
user:
name: admin
password: secret
eureka:
instance:
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://admin:secret@127.0.0.1:9100/eureka/
register-with-eureka: true
Para o servidor na porta 9100:
server:
port: 9100
eureka:
client:
serviceUrl:
defaultZone: http://admin:secret@127.0.0.1:8100/eureka/
Especificação de Endereço IP
No cliente, configure:
eureka:
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
Identificação de Instância
Use o parâmetro instance-id:
eureka:
instance:
instance-id: ${spring.application.name}:${server.port}
Remoção de Serviços Inválidos
Para remover serviços registrados incorretamente:
- Feche o serviço local
- Use ferramentas como Postman para requisições POST em /eureka/apps/{nome_serviço}
Monitoramento de Eventos
Eventos principais:
- EurekaInstanceCanceledEvent
- EurekaInstanceRegisteredEvent
- EurekaInstanceRenewedEvent
- EurekaRegistryAvailableEvent
- EurekaServerStartedEvent
Exemplo de listener:
@Component
public class MonitorEureka {
@EventListener
public void onInstanceCancel(EurekaInstanceCanceledEvent event) {
System.out.println("Serviço cancelado: " + event.getAppName());
}
// Outros listeners...
}