Spring Cloud Netflix Eureka Server 介绍

How to Include Eureka Server

要在项目中包含Eureka Server,请使用组ID为org.springframework.cloud的启动器和spring-cloud-starter-netflix-eureka-server的工件ID。有关使用当前Spring Cloud Release Train设置构建系统的详细信息,请参阅Spring Cloud Project页面。

如果您的项目已使用Thymeleaf作为其模板引擎,则可能无法正确加载Eureka服务器的Freemarker模板。在这种情况下,有必要手动配置模板加载器:

application.yml

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false

How to Run a Eureka Server

以下示例显示了最小的Eureka服务器:

@SpringBootApplication
@EnableEurekaServer
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

服务器有一个主页,其中包含用于/ eureka / *下正常Eureka功能的UI和HTTP API端点。

High Availability, Zones and Regions

Eureka服务器没有后端存储,但注册表中的服务实例都必须发送心跳以使其注册保持最新(因此可以在内存中完成)。客户端还有一个Eureka注册的内存缓存(因此,他们不必为服务的每个请求转到注册表)。

默认情况下,每个Eureka服务器也是Eureka客户端,并且需要(至少一个)服务URL来定位对等体。如果您不提供该服务,该服务将运行并正常运行,但它会在您的日志中填充很多关于无法向对等方注册的噪音。有关区域和区域的客户端功能区支持的详细信息,请参见下文。

有关区域和区域的客户端功能区支持的详细信息,请参见下文。

Standalone Mode

两个缓存(客户端和服务器)和心跳的组合使得独立的Eureka服务器能够非常适应故障,只要有某种监视器或弹性运行时(例如Cloud Foundry)使其保持活动状态即可。在独立模式下,您可能更愿意关闭客户端行为,以便它不会继续尝试并且无法访问其对等方。以下示例显示如何关闭客户端行为:

application.yml (Standalone Eureka Server)

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

请注意,serviceUrl指向与本地实例相同的主机。

Peer Awareness

通过运行多个实例并要求它们相互注册,可以使Eureka更具弹性和可用性。实际上,这是默认行为,因此您需要做的就是将有效的serviceUrl添加到对等体,如以下示例所示:

application.yml (Two Peer Aware Eureka Servers)

---
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2/eureka/

---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/

在前面的示例中,我们有一个YAML文件,可以通过在不同的Spring配置文件中运行它来在两个主机(peer1和peer2)上运行相同的服务器。您可以使用此配置通过操作/ etc / hosts来解析主机名来测试单个主机上的对等感知(在生产中执行此操作没有太大价值)。实际上,如果您在知道自己的主机名的计算机上运行,​​则不需要eureka.instance.hostname(默认情况下,使用java.net.InetAddress查找它)。

您可以将多个对等体添加到系统中,并且只要它们通过至少一个边缘彼此连接,它们就会在它们之间同步注册。如果对等体在物理上是分开的(在数据中心内或在多个数据中心之间),那么系统原则上可以存在“裂脑”类型的故障。您可以向系统添加多个对等体,只要它们彼此直接连接,它们就会在它们之间同步注册。

application.yml (Three Peer Aware Eureka Servers)

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/

---
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1

---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2

---
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3

When to Prefer IP Address

在某些情况下,Eureka最好宣传服务的IP地址而不是主机名。将eureka.instance.preferIpAddress设置为true,当应用程序向eureka注册时,它使用其IP地址而不是其主机名。

如果Java无法确定主机名,则将IP地址发送给Eureka。只有设置主机名的明确方法是设置eureka.instance.hostname属性。您可以使用环境变量在运行时设置主机名 - 例如,eureka.instance.hostname = $ {HOST_NAME}。

Securing The Eureka Server

只需将Spring Security添加到服务器的类路径中,即可通过spring-boot-starter-security保护您的Eureka服务器。默认情况下,当Spring Security位于类路径上时,它将要求在应用程序的每个请求中发送有效的CSRF令牌。Eureka客户端通常不会拥有有效的跨站点请求伪造(CSRF)令牌,您需要为/ eureka / **端点禁用此要求。例如:

@EnableWebSecurity
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}

有关CSRF的更多信息,请参阅Spring Security文档。可以在Spring Cloud Samples回购中找到演示Eureka Server。

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/88763314