Spring Cloud系列(四) Eureka配置详解(Finchley.RC2版本)

在Eureka的服务治理体系中,主要分为服务端和客户端两个不同的角色,服务端为服务注册中心,客户端为提供各个接口的微服务应用,这里介绍一下Eureka的配置。

Eureka服务端配置

在实际应用中,我们所做的配置内容都是对客户端进行的操作,而Eureka服务端更像一个现成的产品,大多数情况下我们不需要修改它的配置。

如果你想了解的话,可以去这个类中查看org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean,服务端的属性都是以eureka.server为前缀。

Eureka客户端的主要配置

  1. 服务注册相关的配置信息,包括服务注册中心的地址,服务获取的间隔时间、可用区域等。
  2. 服务实例相关的配置信息,包括服务实例的名称、IP地址、端口号、健康检查路径等。

服务注册类配置

关于服务注册类的配置信息可用通过org.springframework.cloud.netflix.eureka.EurekaClientConfigBean查看,这些配置信息前缀都是eureka.client

指定注册中心:通过eureka.client.serviceUrl参数实现,该参数的定义如下,它的配置值存储在HashMap类型中,并且有一组默认值,默认的key是defaultZone,默认的value为http://localhost:8761/eureka。我们通过这样设置就可以重新设置注册中心:eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/。如果是高可用注册中心则多个地址之间逗号隔开。

private Map<String, String> serviceUrl = new HashMap<>();

其他配置

这些配置都以eureka.client开头

服务实例类配置

关于服务实例类的配置信息可以在org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean类查看,这些配置信息的前缀都是eureka.instance

元数据

org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean中的配置信息中,有一大部分内容是对服务实例元数据的配置,元数据就是指Eureka客户端在向服务注册中心发送注册请求时,用来描述自身服务信息的对象,其中包含了一些标准化的元数据,比如服务名称、实例名称、实例IP、实力端口等。

在使用Spring Cloud Eureka时,所有的配置信息都通过org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean进行加载,但在真正进行服务注册时还是会包装成com.netflix.appinfo.InstanceInfo对象发送给Eureka客户端。这两个类定义非常相似,在com.netflix.appinfo.InstanceInfo类中Map<String, String> metadata = new ConcurrentHashMap<String, String>()是自定义的元数据信息,而其他则是标准化的元数据信息。

我们可以通过eureka.instance.<properties>=<value>的格式对标准化的元数据信息直接进行配置,其中<properties>就是EurekaInstanceConfigBean对象中的成员变量名。而对于自定义元数据,可以通过eureka.instance.metadataMap.<key>=<value>的格式进行配置,比如:

eureka.instance.metadataMap.zone=shanghai

实例名配置

它是区分同一服务不同实例的唯一标识。在Netflix Eureka的原生实现中,默认是以主机名作为默认值,这样的设置使得在同一主机上无法启动多个相同的服务实例。所以在Spring Cloud Eureka中针对同一主机启动多个实例的情况,对实例名的默认命名做了更合理的扩展,采用如下规则

 ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}

我们可以通过eureka.instance.instanceId来配置实例名。当我们在本地做负载均衡调试时,采用的是指定多个端口来启动同一服务的多个实例,但这样你会发现实例名其实还是一样的只是端口不一样,我们可以这样设置指定不同的实例名

eureka.instance.instanceId=${spring.application.name}:${random.int}

这样就可以通过不指定端口就启动同一服务的多个实例。

端点配置

org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean类中,有一些URL的配置信息,如homePageUrl、statusPageUrl、healthCheckUrl。其中状态页和健康检查的URL默认是使用actuator提供的info和health端点。我们必须保证客户端的health端点是一个可以被注册中心正确访问到的地址,否则注册中心不会根据应用的健康检查来改变应用状态(仅当开启了healthcheck功能时,以该端点信息作为健康检查标准而不是心跳)。如果info端点不能正常访问,则在Eureka面板单击服务时不能访问到服务实例提供的信息接口。一般情况下我们不需要配置这些信息,如果你修改了info端点和health端点的路径,那么就需要修改这个配置了,只需要和actuator的做同样修改即可,比如加上相同的前缀、改为同样的新路径等。

eureka.instance.statusPageUrlPath=info端点的路径
eureka.instance.healthCheckUrlPath=health端点的路径

上述配置是使用相对路径进行配置,如果客户端应用以HTTPS的方式而不是HTTP的方式来暴露服务和监控端点时,要使用绝对路径。

eureka.instance.statusPageUrlPath=https://${eureka.instance.hostname}/actuator/info
eureka.instance.healthCheckUrlPath=https://${eureka.instance.hostname}/actuator/health

其他配置

除了前三个可能会修改外,其余使用默认配置就可以。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值