资讯专栏INFORMATION COLUMN

Spring Cloud 参考文档(服务发现:Eureka Server)

BLUE / 1867人阅读

摘要:何时首选地址在某些情况下,最好公布服务的地址而不是主机名,将设置为,当应用程序向注册时,它使用其地址而不是其主机名。

服务发现:Eureka Server

本节介绍如何设置Eureka服务器。

如何包含Eureka服务器

要在项目中包含Eureka Server,请使用组ID为org.springframework.cloud和工件ID为spring-cloud-starter-netflix-eureka-server的启动器。

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

application.yml

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
如何运行Eureka服务器

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

@SpringBootApplication
@EnableEurekaServer
public class Application {

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

}

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

以下链接有一些Eureka背景阅读:flux capacitor和谷歌小组讨论。

由于Gradle的依赖关系解析规则和缺少父bom特性,依赖spring-cloud-starter-netflix-eureka-server可能导致应用程序启动失败,要解决此问题,请添加Spring Boot Gradle插件并导入Spring cloud starter parent bom,如下所示:

build.gradle

buildscript {
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:{spring-boot-docs-version}")
  }
}

apply plugin: "spring-boot"

dependencyManagement {
  imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:{spring-cloud-version}"
  }
}
高可用性、Zones和Regions

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

默认情况下,每个Eureka服务器也是Eureka客户端,并且需要(至少一个)服务URL来定位对等体,如果你不提供该服务,该服务将运行并工作,但它会在你的日志中填充很多关于无法向对等方注册的噪音。

独立模式

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

application.yml(独立Eureka服务器)。

server:
  port: 8761

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

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

对等感知

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

application.yml(两个Peer Aware Eureka服务器)。

---
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配置文件中运行它来在两个主机(peer1peer2)上运行相同的服务器,你可以使用此配置通过操作/etc/hosts来解析主机名来测试单个主机上的对等感知(在生产中执行此操作没有太大价值)。实际上,如果你在知道自己的主机名的计算机上运行,​​则不需要eureka.instance.hostname(默认情况下,使用java.net.InetAddress查找它)。

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

application.yml(三个Peer Aware Eureka服务器)。

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
何时首选IP地址

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

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

只需将spring-boot-starter-security添加到服务器的类路径中,即可通过Spring 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 demo。

JDK 11支持

在JDK 11中删除了Eureka服务器所依赖的JAXB模块,如果你打算在运行Eureka服务器时使用JDK 11,则必须在POM或Gradle文件中包含这些依赖项。


    javax.xml.bind
    jaxb-api
    2.3.0


    com.sun.xml.bind
    jaxb-core
    2.3.0


    com.sun.xml.bind
    jaxb-impl
    2.3.0
上一篇:服务发现:Eureka客户端 下一篇:断路器:Hystrix客户端

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74128.html

相关文章

  • Spring Cloud 参考文档服务发现Eureka客户端)

    摘要:这些发布在服务注册表中,客户端使用它们以直接的方式联系服务,可以将额外元数据添加到中的实例注册中,并且可以在远程客户端中访问此元数据。 服务发现:Eureka客户端 服务发现是基于微服务架构的关键原理之一,尝试手动配置每个客户端或某种形式的约定可能很难做到并且可能很脆弱,Eureka是Netflix Service Discovery服务器和客户端,服务器可以被配置和部署为高可用性,每...

    awokezhou 评论0 收藏0
  • Spring Cloud 参考文档Spring Cloud Config Client)

    摘要:应用程序可以立即利用或应用程序开发人员提供的其他外部属性源,它还提取了一些与变化事件相关的额外有用特性。标签也可以以逗号分隔列表的形式提供,在这种情况下,列表中的项目将逐个尝试,直到成功为止,在处理特性分支时,此行为非常有用。 Spring Cloud Config Client Spring Boot应用程序可以立即利用Spring Config Server(或应用程序开发人员提供...

    DevWiki 评论0 收藏0
  • 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka

    摘要:创建过程同类似创建完如下通过注解表明自己是一个仅仅是不够的,还需要在配置文件中注明自己的服务注册中心的地址,配置文件如下需要指明这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个。 转载请标明出处: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系...

    only_do 评论0 收藏0
  • SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka

    摘要:下一篇介绍基于的服务注册与调用。服务提供者工程配置这里服务提供者是使用之前进阶教程第三篇整合连接池以及监控改造而来,这里一样的部分就不再重复说明,下面将说明新增的部分。 Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<