Spring Cloud Netflix简介(一)

2.2.0.BUILD-快照

该项目通过自动配置和Spring环境以及其他Spring编程模型习惯用法为Spring Boot应用程序提供Netflix OSS集成。通过一些简单的注释,您可以快速启用和配置应用程序内的常见模式,并使用经过实战考验的Netflix组件构建大型分布式系统。提供的模式包括服务发现(Eureka),断路器(Hystrix),智能路由(Zuul)和客户端负载平衡(Ribbon)。

Service Discovery: Eureka Clients

服务发现是基于微服务的体系结构的关键原则之一。尝试手动配置每个客户端或某种形式的约定可能很难做到并且可能很脆弱。Eureka是Netflix服务发现服务器和客户端。可以配置和部署服务器以使其具有高可用性,每个服务器将注册服务的状态复制到其他服务器。

How to Include Eureka Client

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

Registering with Eureka

当客户向Eureka注册时,它会提供有关自身的元数据 - 例如主机,端口,运行状况指示器URL,主页和其他详细信息。Eureka从属于服务的每个实例接收心跳消息。如果心跳故障超过可配置的时间表,则通常会从注册表中删除该实例。

以下示例显示了最小的Eureka客户端应用程序:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

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

}

请注意,前面的示例显示了一个普通的Spring Boot应用程序。通过在类路径上安装spring-cloud-starter-netflix-eureka-client,您的应用程序将自动注册到Eureka Server。

找到Eureka服务器需要进行配置,如以下示例所示:

application.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

在前面的示例中,“defaultZone”是一个魔术字符串后备值,它为任何不表示首选项的客户端提供服务URL(换句话说,它是一个有用的默认值)。

默认应用程序名称(即服务ID),虚拟主机和非安全端口(取自环境)是$ {spring.application.name},$ {spring.application.name}和$ {server.port}。

在类路径上使用spring-cloud-starter-netflix-eureka-client使应用程序成为Eureka“实例”(即,它自己注册)和“客户端”(它可以查询注册表以查找其他服务)。实例行为由eureka.instance。*配置键驱动,但如果您确保应用程序具有spring.application.name的值(这是Eureka服务ID或VIP的默认值),则默认值很好。

有关可配置选项的更多详细信息,请参阅EurekaInstanceConfigBean和EurekaClientConfigBean。要禁用Eureka Discovery Client,可以将eureka.client.enabled设置为false。当spring.cloud.discovery.enabled设置为false时,Eureka Discovery Client也将被禁用。

Authenticating with the Eureka Server

如果其中一个eureka.client.serviceUrl.defaultZone URL中嵌入了凭据,则会自动将HTTP基本身份验证添加到您的eureka客户端(卷曲样式,如下所示:http:// user:password @ localhost:8761 / eureka)。对于更复杂的需求,您可以创建一个类型为DiscoveryClientOptionalArgs的@Bean并将ClientFilter实例注入其中,所有这些实例都应用于从客户端到服务器的调用。

由于Eureka的限制,无法支持每服务器基本身份验证凭据,因此仅使用找到的第一个集合。

Status Page and Health Indicator

Eureka实例的状态页面和运行状况指示器分别默认为/ info和/ health,它们是Spring Boot Actuator应用程序中有用端点的默认位置。如果使用非默认上下文路径或servlet路径(例如server.servletPath = / custom),则需要更改这些,即使对于Actuator应用程序也是如此。以下示例显示了两个设置的默认值:

application.yml

eureka:
  instance:
    statusPageUrlPath: ${server.servletPath}/info
    healthCheckUrlPath: ${server.servletPath}/health

这些链接显示在客户端使用的元数据中,并在某些情况下用于决定是否向您的应用程序发送请求,因此如果它们准确,则会很有帮助。

在Dalston中,还需要在更改管理上下文路径时设置状态和运行状况检查URL。从Edgware开始删除此要求。

Registering a Secure Application

如果您的应用程序想通过HTTPS联系,您可以在EurekaInstanceConfig中设置两个标志:

  • eureka.instance.[nonSecurePortEnabled]=[false]

  • eureka.instance.[securePortEnabled]=[true]

这样做会使Eureka发布实例信息,显示对安全通信的明确偏好。对于以这种方式配置的服务,Spring Cloud DiscoveryClient始终返回以https开头的URI。同样,当以这种方式配置服务时,Eureka(本机)实例信息具有安全的运行状况检查URL。

由于Eureka在内部工作的方式,它仍然会发布状态和主页的非安全URL,除非您也明确地覆盖这些URL。您可以使用占位符来配置eureka实例URL,如以下示例所示:

application.yml

eureka:
  instance:
    statusPageUrl: https://${eureka.hostname}/info
    healthCheckUrl: https://${eureka.hostname}/health
    homePageUrl: https://${eureka.hostname}/
(请注意,$ {eureka.hostname}是仅在Eureka的更高版本中可用的本机占位符。您也可以使用Spring占位符实现相同的功能 - 例如,使用$ {eureka.instance.hostName}。)

如果您的应用程序在代理后面运行,并且SSL终止在代理中(例如,如果您在Cloud Foundry或其他平台作为服务运行),那么您需要确保代理“转发”标头被截获和处理通过申请。如果嵌入在Spring Boot应用程序中的Tomcat容器具有“X-Forwarded  -  \ *”标头的显式配置,则会自动发生这种情况。您的应用程序呈现给自己错误的链接(错误的主机,端口或协议)表明您的配置错误。

猜你喜欢

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