没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1 / 60
Spring Cloud Netflix
1.3.0.RELEASE
该项目通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型的习惯方式来为
Spring Boot 应用程序提供 Netflix OSS 集成。通过几个简单的注释,您可以快速启
用和配置应用程序中的常见模式,并通过经过测试的 Netflix 组件构建大型分布式
系统。提供的模式包括服务发现(Eureka),断路器(Hystrix),智能路由(Zuul)
和客户端负载平衡(Ribbon)。
服务发现:Eureka 客户端
服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的
约定可能非常困难,可以非常脆弱。Netflix 服务发现服务器和客户端是 Eureka。
可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他
服务器。
如何包含 Eureka 客户端
要在您的项目中包含 Eureka 客户端,使用组 org.springframework.cloud 和工件 id
spring-cloud-starter-eureka 的启动器。有关 使用当前的 Spring Cloud 发布列表设置
构建系统的详细信息,请参阅 Spring Cloud 项目页面。
注册 Eureka
当客户端注册 Eureka 时,它提供有关自身的元数据,例如主机和端口,运行状况
指示符 URL,主页等。Eureka 从属于服务的每个实例接收心跳消息。如果心跳失
败超过可配置的时间表,则通常将该实例从注册表中删除。
示例 eureka 客户端:
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
2 / 60
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
(即完全正常的 Spring Boot 应用程序)。在这个例子中,我们明确地使用
@EnableEurekaClient,但只有 Eureka 可用,你也可以使用@EnableDiscoveryClient。
需要配置才能找到 Eureka 服务器。例:
application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
其中“defaultZone”是一个魔术字符串后备值,为任何不表示首选项的客户端提供
服务 URL(即它是有用的默认值)。
从 Environment 获取的默认应用程序名称(服务 ID),虚拟主机和非安全端口分
别为${spring.application.name},${spring.application.name}和${server.port}。
@EnableEurekaClient 使应用程序成为 Eureka“实例”(即注册自身)和“客户端”(即
它可以查询注册表以查找其他服务)。实例行为由 eureka.instance.*配置键驱动,
但如果您确保您的应用程序具有 spring.application.name(这是 Eureka 服务标识或
VIP 的默认值),那么默认值将会很好。
有关可配置选项的更多详细信息,请参阅 EurekaInstanceConfigBean 和
EurekaClientConfigBean。
使用 Eureka 服务器进行身份验证
如果其中一个 eureka.client.serviceUrl.defaultZone URL 中包含一个凭据(如
http://user:password@localhost:8761/eureka)),HTTP 基本身份验证将自动添加到
您的 eureka 客户端。对于更复杂的需求,您可以创建@Bean 类型
DiscoveryClientOptionalArgs 并注入 ClientFilter 实例,所有这些都将应用于从客户
端到服务器的调用。
注
由于 Eureka 中的限制,不可能支持每个服务器的基本身份验证凭据,因此
3 / 60
意
只能使用第一个找到的集合。
状态页和健康指标
Eureka 实例的状态页面和运行状况指示器分别默认为“/ info”和“/ health”,它们是
Spring Boot Actuator 应用程序中有用端点的默认位置。如果您使用非默认上下文
路径或 servlet 路径(例如 server.servletPath=/foo)或管理端点路径(例如
management.contextPath=/admin)),则需要更改这些,即使是执行器应用程序。
例:
application.yml
eureka:
instance:
statusPageUrlPath: ${management.context-path}/info
healthCheckUrlPath: ${management.context-path}/health
这些链接显示在客户端使用的元数据中,并在某些情况下用于决定是否将请求发
送到应用程序,因此如果它们是准确的,这是有帮助的。
注册安全应用程序
如果您的应用程序想通过 HTTPS 联系,则可以分别在 EurekaInstanceConfig,
即
eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true] 中设置两个
标志。这将使 Eureka 发布实例信息显示安全通信的显式偏好。Spring Cloud
DiscoveryClient 将始终为这样配置的服务返回 https://…; URI,并且 Eureka(本机)
实例信息将具有安全的健康检查 URL。
由于 Eureka 在内部工作,它仍然会发布状态和主页的非安全网址,除非您也明确
地覆盖。您可以使用占位符来配置 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}。)
4 / 60
注
意
如果您的应用程序在代理服务器后面运行,并且 SSL 终止服务在代理中(例
如,如果您运行在 Cloud Foundry 或其他平台作为服务),则需要确保代理“转
发”头部被截取并处理应用程序。Spring Boot 应用程序中的嵌入式 Tomcat
容器会自动执行“X-Forwarded - \ *”头的显式配置。你这个错误的一个迹象就
是你的应用程序本身所呈现的链接是错误的(错误的主机,端口或协议)。
Eureka 的健康检查
默认情况下,Eureka 使用客户端心跳来确定客户端是否已启动。除非另有规定,
否则 Discovery Client 将不会根据 Spring Boot Actuator 传播应用程序的当前运行状
况检查状态。这意味着成功注册后 Eureka 将永远宣布申请处于“UP”状态。可以通
过启用 Eureka 运行状况检查来改变此行为,从而将应用程序状态传播到 Eureka。
因此,每个其他应用程序将不会在“UP”之外的状态下将流量发送到应用程序。
application.yml
eureka:
client:
healthcheck:
enabled: true
警
告
eureka.client.healthcheck.enabled=true 只能在 application.yml 中设置。设置
bootstrap.yml 中的值将导致不良副作用,例如在 eureka 中注册 UNKNOWN
状态。
如果您需要更多的控制健康检查,您可以考虑实施自己的
com.netflix.appinfo.HealthCheckHandler。
Eureka 实例和客户端的元数据
值得花点时间了解 Eureka 元数据的工作原理,以便您可以在平台上使用它。有主
机名,IP 地址,端口号,状态页和运行状况检查等标准元数据。这些发布在服务
注册表中,由客户使用,以直接的方式联系服务。额外的元数据可以添加到
eureka.instance.metadataMap 中的实例注册中,并且这可以在远程客户端中访问,
但一般不会改变客户端的行为,除非知道元数据的含义。下面描述了几个特殊情
况,其中 Spring Cloud 已经为元数据映射指定了含义。
在 Cloudfoundry 上使用 Eureka
5 / 60
Cloudfoundry 有一个全局路由器,所以同一个应用程序的所有实例都具有相同的
主机名(在具有相似架构的其他 PaaS 解决方案中也是如此)。这不一定是使用
Eureka 的障碍,但是如果您使用路由器(建议,甚至是强制性的,具体取决于您
的平台的设置方式),则需要明确设置主机名和端口号(安全或非安全),以便
他们使用路由器。您可能还需要使用实例元数据,以便您可以区分客户端上的实
例(例如,在自定义负载平衡器中)。默认情况下,eureka.instance.instanceId 为
vcap.application.instance_id。例如:
application.yml
eureka:
instance:
hostname: ${vcap.application.uris[0]}
nonSecurePort: 80
根据 Cloudfoundry 实例中安全规则的设置方式,您可以注册并使用主机 VM 的 IP
地址进行直接的服务到服务调用。此功能尚未在 Pivotal Web Services(PWS)上
提供。
在 AWS 上使用 Eureka
如果应用程序计划将部署到 AWS 云,那么 Eureka 实例必须被配置为 AWS 意识
到,这可以通过定制来完成 EurekaInstanceConfigBean 方式如下:
@Bean
@Profile("!default")
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils) {
EurekaInstanceConfigBean b = new EurekaInstanceConfigBean(inetUtils);
AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
b.setDataCenterInfo(info);
return b;
}
更改 Eureka 实例 ID
香草 Netflix Eureka 实例注册了与其主机名相同的 ID(即每个主机只有一个服务)。
Spring Cloud Eureka 提供了一个明智的默认,如下所示:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.insta
nce_id:${server.port}}}。例如 myhost:myappname:8080。
使用 Spring Cloud,您可以通过在 eureka.instance.instanceId 中提供唯一的标识来覆
盖此。例如:
application.yml
剩余59页未读,继续阅读
资源评论
jack_迷途书童
- 粉丝: 4
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功