【Spring Cloud总结】14.Eureka常用配置详解

接上篇《13.Eureka深入理解》  Spring Cloud版本为Finchley.SR2版

上一篇我们介绍了Eureka元数据、注册服务慢问题、Eureka的高可用模式,本篇来详细介绍一下Eureka的常用配置。
本部分官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_appendix_compendium_of_configuration_properties

Eureka有许多的配置项,我们在官方文档中的配置附录中(Part XVIII. Appendix: Compendium of Configuration Properties章节),可以看到Eureka的所有配置项目:

实际上有关Eureka的配置项有上百种,这里分类介绍相关配置项,并在最后动手测试一些重要的配置项。

Eureka的配置分为instance实例配置项、client客户端配置项、dashboard仪表板配置项、Server服务端配置项,其中Server还分为“Server 与 client关联的配置”、“server 自定义实现的配置”、“server node 与 node 之间关联的配置”、“server 与 remote 关联的配置”、“server 与 ASG/AWS/EIP/route52 之间关联的配置”。

参数中文翻译参考:https://blog.csdn.net/zhiyegai/article/details/89311381

一、Eureka instance 配置项

#服务注册中心实例的主机名
eureka.instance.hostname=localhost
#注册在Eureka服务中的应用组名
eureka.instance.app-group-name=
#注册在的Eureka服务中的应用名称
eureka.instance.appname=
#该实例注册到服务中心的唯一ID
eureka.instance.instance-id=
#该实例的IP地址
eureka.instance.ip-address=
#该实例,相较于hostname是否优先使用IP
eureka.instance.prefer-ip-address=false

#用于AWS平台自动扩展的与此实例关联的组名,
eureka.instance.a-s-g-name=
#部署此实例的数据中心
eureka.instance.data-center-info=
#默认的地址解析顺序
eureka.instance.default-address-resolution-order=
#该实例的环境配置
eureka.instance.environment=
#初始化该实例,注册到服务中心的初始状态
eureka.instance.initial-status=up
#表明是否只要此实例注册到服务中心,立马就进行通信
eureka.instance.instance-enabled-onit=false
#该服务实例的命名空间,用于查找属性
eureka.instance.namespace=eureka
#该服务实例的子定义元数据,可以被服务中心接受到
eureka.instance.metadata-map.test = test

#服务中心删除此服务实例的等待时间(秒为单位),时间间隔为最后一次服务中心接受到的心跳时间
eureka.instance.lease-expiration-duration-in-seconds=90
#该实例给服务中心发送心跳的间隔时间,用于表明该服务实例可用
eureka.instance.lease-renewal-interval-in-seconds=30
#该实例,注册服务中心,默认打开的通信数量
eureka.instance.registry.default-open-for-traffic-count=1
#每分钟续约次数
eureka.instance.registry.expected-number-of-renews-per-min=1

#该实例健康检查url,绝对路径
eureka.instance.health-check-url=
#该实例健康检查url,相对路径
eureka.instance.health-check-url-path=/health
#该实例的主页url,绝对路径
eureka.instance.home-page-url=
#该实例的主页url,相对路径
eureka.instance.home-page-url-path=/
#该实例的安全健康检查url,绝对路径
eureka.instance.secure-health-check-url=
#https通信端口
eureka.instance.secure-port=443
#https通信端口是否启用
eureka.instance.secure-port-enabled=false
#http通信端口
eureka.instance.non-secure-port=80
#http通信端口是否启用
eureka.instance.non-secure-port-enabled=true
#该实例的安全虚拟主机名称(https)
eureka.instance.secure-virtual-host-name=unknown
#该实例的虚拟主机名称(http)
eureka.instance.virtual-host-name=unknown
#该实例的状态呈现url,绝对路径
eureka.instance.status-page-url=
#该实例的状态呈现url,相对路径
eureka.instance.status-page-url-path=/status

二、Eureka Client 配置项

#该客户端是否可用
eureka.client.enabled=true
#实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true
eureka.client.register-with-eureka=false
#此客户端是否获取eureka服务器注册表上的注册信息,默认为true
eureka.client.fetch-registry=false
#是否过滤掉,非UP的实例。默认为true
eureka.client.filter-only-up-instances=true
#与Eureka注册服务中心的通信zone和url地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

#client连接Eureka服务端后的空闲等待时间,默认为30 秒
eureka.client.eureka-connection-idle-timeout-seconds=30
#client连接eureka服务端的连接超时时间,默认为5秒
eureka.client.eureka-server-connect-timeout-seconds=5
#client对服务端的读超时时长
eureka.client.eureka-server-read-timeout-seconds=8
#client连接all eureka服务端的总连接数,默认200
eureka.client.eureka-server-total-connections=200
#client连接eureka服务端的单机连接数量,默认50
eureka.client.eureka-server-total-connections-per-host=50
#执行程序指数回退刷新的相关属性,是重试延迟的最大倍数值,默认为10
eureka.client.cache-refresh-executor-exponential-back-off-bound=10
#执行程序缓存刷新线程池的大小,默认为5
eureka.client.cache-refresh-executor-thread-pool-size=2
#心跳执行程序回退相关的属性,是重试延迟的最大倍数值,默认为10
eureka.client.heartbeat-executor-exponential-back-off-bound=10
#心跳执行程序线程池的大小,默认为5
eureka.client.heartbeat-executor-thread-pool-size=5
# 询问Eureka服务url信息变化的频率(s),默认为300秒
eureka.client.eureka-service-url-poll-interval-seconds=300
#最初复制实例信息到eureka服务器所需的时间(s),默认为40秒
eureka.client.initial-instance-info-replication-interval-seconds=40
#间隔多长时间再次复制实例信息到eureka服务器,默认为30秒
eureka.client.instance-info-replication-interval-seconds=30
#从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
eureka.client.registry-fetch-interval-seconds=30

# 获取实例所在的地区。默认为us-east-1
eureka.client.region=us-east-1
#实例是否使用同一zone里的eureka服务器,默认为true,理想状态下,eureka客户端与服务端是在同一zone下
eureka.client.prefer-same-zone-eureka=true
# 获取实例所在的地区下可用性的区域列表,用逗号隔开。(AWS)
eureka.client.availability-zones.china=defaultZone,defaultZone1,defaultZone2
#eureka服务注册表信息里的以逗号隔开的地区名单,如果不这样返回这些地区名单,则客户端启动将会出错。默认为null
eureka.client.fetch-remote-regions-registry=
#服务器是否能够重定向客户端请求到备份服务器。 如果设置为false,服务器将直接处理请求,如果设置为true,它可能发送HTTP重定向到客户端。默认为false
eureka.client.allow-redirects=false
#客户端数据接收
eureka.client.client-data-accept=
#增量信息是否可以提供给客户端看,默认为false
eureka.client.disable-delta=false
#eureka服务器序列化/反序列化的信息中获取“_”符号的的替换字符串。默认为“__“
eureka.client.escape-char-replacement=__
#eureka服务器序列化/反序列化的信息中获取“$”符号的替换字符串。默认为“_-”
eureka.client.dollar-replacement="_-"
#当服务端支持压缩的情况下,是否支持从服务端获取的信息进行压缩。默认为true
eureka.client.g-zip-content=true
#是否记录eureka服务器和客户端之间在注册表的信息方面的差异,默认为false
eureka.client.log-delta-diff=false
# 如果设置为true,客户端的状态更新将会点播更新到远程服务器上,默认为true
eureka.client.on-demand-update-status-change=true
#此客户端只对一个单一的VIP注册表的信息感兴趣。默认为null
eureka.client.registry-refresh-single-vip-address=
#client是否在初始化阶段强行注册到服务中心,默认为false
eureka.client.should-enforce-registration-at-init=false
#client在shutdown的时候是否显示的注销服务从服务中心,默认为true
eureka.client.should-unregister-on-shutdown=true

# 获取eureka服务的代理主机,默认为null
eureka.client.proxy-host=
#获取eureka服务的代理密码,默认为null
eureka.client.proxy-password=
# 获取eureka服务的代理端口, 默认为null
eureka.client.proxy-port=
# 获取eureka服务的代理用户名,默认为null
eureka.client.proxy-user-name=

#属性解释器
eureka.client.property-resolver=
#获取实现了eureka客户端在第一次启动时读取注册表的信息作为回退选项的实现名称
eureka.client.backup-registry-impl=
#这是一个短暂的×××的配置,如果最新的×××是稳定的,则可以去除,默认为null
eureka.client.decoder-name=
#这是一个短暂的编码器的配置,如果最新的编码器是稳定的,则可以去除,默认为null
eureka.client.encoder-name=

#是否使用DNS机制去获取服务列表,然后进行通信。默认为false
eureka.client.use-dns-for-fetching-service-urls=false
#获取要查询的DNS名称来获得eureka服务器,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
eureka.client.eureka-server-d-n-s-name=
#获取eureka服务器的端口,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
eureka.client.eureka-server-port=
#表示eureka注册中心的路径,如果配置为eureka,则为http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表示eureka作为客户端向注册中心注册,从而构成eureka集群。此配置只有在eureka服务器ip地址列表是在DNS中才会用到,默认为null
eureka.client.eureka-server-u-r-l-context=

三、Eureka Dashboard仪表板配置项

#是否启用Eureka的仪表板。默认为true.
eureka.dashboard.enabled=true
#到Eureka仪表板的服务路径(相对于servlet路径)。默认为“/”
eureka.dashboard.path=/

四、Eureka Server 配置项

1、server 与 client 关联的配置

#服务端开启自我保护模式。无论什么情况,服务端都会保持一定数量的服务。避免client与server的网络问题,而出现大量的服务被清除。
eureka.server.enable-self-preservation=true
#开启清除无效服务的定时任务,时间间隔。默认1分钟
eureka.server.eviction-interval-timer-in-ms= 60000
#间隔多长时间,清除过期的delta数据
eureka.server.delta-retention-timer-interval-in-ms=0
#过期数据,是否也提供给client
eureka.server.disable-delta=false
#eureka服务端是否记录client的身份header
eureka.server.log-identity-headers=true
#请求频率限制器
eureka.server.rate-limiter-burst-size=10
#是否开启请求频率限制器
eureka.server.rate-limiter-enabled=false
#请求频率的平均值
eureka.server.rate-limiter-full-fetch-average-rate=100
#是否对标准的client进行频率请求限制。如果是false,则只对非标准client进行限制
eureka.server.rate-limiter-throttle-standard-clients=false
#注册服务、拉去服务列表数据的请求频率的平均值
eureka.server.rate-limiter-registry-fetch-average-rate=500
#设置信任的client list
eureka.server.rate-limiter-privileged-clients=
#在设置的时间范围类,期望与client续约的百分比。
eureka.server.renewal-percent-threshold=0.85
#多长时间更新续约的阈值
eureka.server.renewal-threshold-update-interval-ms=0
#对于缓存的注册数据,多长时间过期
eureka.server.response-cache-auto-expiration-in-seconds=180
#多长时间更新一次缓存中的服务注册数据
eureka.server.response-cache-update-interval-ms=0
#缓存增量数据的时间,以便在检索的时候不丢失信息
eureka.server.retention-time-in-m-s-in-delta-queue=0
#当时间戳不一致的时候,是否进行同步
eureka.server.sync-when-timestamp-differs=true
#是否采用只读缓存策略,只读策略对于缓存的数据不会过期。
eureka.server.use-read-only-response-cache=true

2、server 自定义实现的配置

#json的转换的实现类名
eureka.server.json-codec-name=
#PropertyResolver
eureka.server.property-resolver=
#eureka server xml的编解码实现名称
eureka.server.xml-codec-name=

3、server node 与 node 之间关联的配置

#发送复制数据是否在request中,总是压缩
eureka.server.enable-replicated-request-compression=false
#指示群集节点之间的复制是否应批处理以提高网络效率。
eureka.server.batch-replication=false
#允许备份到备份池的最大复制事件数量。而这个备份池负责除状态更新的其他事件。可以根据内存大小,超时和复制流量,来设置此值得大小
eureka.server.max-elements-in-peer-replication-pool=10000
#允许备份到状态备份池的最大复制事件数量
eureka.server.max-elements-in-status-replication-pool=10000
#多个服务中心相互同步信息线程的最大空闲时间
eureka.server.max-idle-thread-age-in-minutes-for-peer-replication=15
#状态同步线程的最大空闲时间
eureka.server.max-idle-thread-in-minutes-age-for-status-replication=15
#服务注册中心各个instance相互复制数据的最大线程数量
eureka.server.max-threads-for-peer-replication=20
#服务注册中心各个instance相互复制状态数据的最大线程数量
eureka.server.max-threads-for-status-replication=1
#instance之间复制数据的通信时长
eureka.server.max-time-for-replication=30000
#正常的对等服务instance最小数量。-1表示服务中心为单节点。
eureka.server.min-available-instances-for-peer-replication=-1
#instance之间相互复制开启的最小线程数量
eureka.server.min-threads-for-peer-replication=5
#instance之间用于状态复制,开启的最小线程数量
eureka.server.min-threads-for-status-replication=1
#instance之间复制数据时可以重试的次数
eureka.server.number-of-replication-retries=5
#eureka节点间间隔多长时间更新一次数据。默认10分钟。
eureka.server.peer-eureka-nodes-update-interval-ms=600000
#eureka服务状态的相互更新的时间间隔。
eureka.server.peer-eureka-status-refresh-time-interval-ms=0
#eureka对等节点间连接超时时间
eureka.server.peer-node-connect-timeout-ms=200
#eureka对等节点连接后的空闲时间
eureka.server.peer-node-connection-idle-timeout-seconds=30
#节点间的读数据连接超时时间
eureka.server.peer-node-read-timeout-ms=200
#eureka server 节点间连接的总共最大数量
eureka.server.peer-node-total-connections=1000
#eureka server 节点间连接的单机最大数量
eureka.server.peer-node-total-connections-per-host=10
#在服务节点启动时,eureka尝试获取注册信息的次数
eureka.server.registry-sync-retries=
#在服务节点启动时,eureka多次尝试获取注册信息的间隔时间
eureka.server.registry-sync-retry-wait-ms=
#当eureka server启动的时候,不能从对等节点获取instance注册信息的情况,应等待多长时间。
eureka.server.wait-time-in-ms-when-sync-empty=0

4、server 与 remote 关联的配置

#过期数据,是否也提供给远程region
eureka.server.disable-delta-for-remote-regions=false
#回退到远程区域中的应用程序的旧行为 (如果已配置) 如果本地区域中没有该应用程序的实例, 则将被禁用。
eureka.server.disable-transparent-fallback-to-other-region=false
#指示在服务器支持的情况下, 是否必须为远程区域压缩从尤里卡服务器获取的内容。
eureka.server.g-zip-content-from-remote-region=true
#连接eureka remote note的连接超时时间
eureka.server.remote-region-connect-timeout-ms=1000
#remote region 应用白名单
eureka.server.remote-region-app-whitelist.
#连接eureka remote note的连接空闲时间
eureka.server.remote-region-connection-idle-timeout-seconds=30
#执行remote region 获取注册信息的请求线程池大小
eureka.server.remote-region-fetch-thread-pool-size=20
#remote region 从对等eureka加点读取数据的超时时间
eureka.server.remote-region-read-timeout-ms=1000
#从remote region 获取注册信息的时间间隔
eureka.server.remote-region-registry-fetch-interval=30
#remote region 连接eureka节点的总连接数量
eureka.server.remote-region-total-connections=1000
#remote region 连接eureka节点的单机连接数量
eureka.server.remote-region-total-connections-per-host=50
#remote region抓取注册信息的存储文件,而这个可靠的存储文件需要全限定名来指定
eureka.server.remote-region-trust-store=
#remote region 储存的文件的密码
eureka.server.remote-region-trust-store-password=
#remote region url.多个逗号隔开
eureka.server.remote-region-urls=
#remote region url.多个逗号隔开
eureka.server.remote-region-urls-with-name.

5、server 与 ASG/AWS/EIP/route52 之间关联的配置

#缓存ASG信息的过期时间。
eureka.server.a-s-g-cache-expiry-timeout-ms=0
#查询ASG信息的超时时间
eureka.server.a-s-g-query-timeout-ms=300
#服务更新ASG信息的频率
eureka.server.a-s-g-update-interval-ms=0
#AWS访问ID
eureka.server.a-w-s-access-id=
#AWS安全密钥
eureka.server.a-w-s-secret-key=
#AWS绑定策略
eureka.server.binding-strategy=eip
#用于从第三方AWS 帐户描述自动扩展分组的角色的名称。
eureka.server.list-auto-scaling-groups-role-name=
#是否应该建立连接引导
eureka.server.prime-aws-replica-connections=true
#服务端尝试绑定候选EIP的次数
eureka.server.e-i-p-bind-rebind-retries=3
#服务端绑定EIP的时间间隔.如果绑定就检查;如果绑定失效就重新绑定。当且仅当已经绑定的情况
eureka.server.e-i-p-binding-retry-interval-ms=10
#服务端绑定EIP的时间间隔.当且仅当服务为绑定的情况
eureka.server.e-i-p-binding-retry-interval-ms-when-unbound=
#服务端尝试绑定route53的次数
eureka.server.route53-bind-rebind-retries=3
#服务端间隔多长时间尝试绑定route53
eureka.server.route53-binding-retry-interval-ms=30
#
eureka.server.route53-domain-t-t-l=10

五、重点参数讲解和测试

上面叙述了Eureka的所有参数配置,这里我们重点讲解一些参数,然后在之前的系统上对一些参数进行测试。
1、eureka.client.prefer-same-zone-eureka
该参数的意思是:实例是否使用同一zone里的eureka服务器,默认为true,理想状态下,eureka客户端与服务端是在同一zone下。
在eureka集群环境下,分为服务所在的“区域(region)”以及“可用区(zone)”的概念,根据地理位置会将某个地区的基础设施服务集合成为一个区域(region),每一个区域(region)又分为可用区(zone),一个可用区一般是由多个数据中心组成:

假设一个eureka客户端是在zone1上,而6个eureka服务端都有配置,那么它默认连接的是zone1的eureka1、eureka2和eureka3的服务端,即上面的配置默认使用同一zone里的eureka服务器。

2、eureka.client.register-with-eureka
该配置声明是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true。
有时候有些服务不想被其它的eureka服务器发现自己,而又想要发现其它的服务,我们称这种服务为单点服务(Stand By Server),此时就需要配置这个配置为false。

3、eureka.client.serviceUrl.defaultZone
该参数表示与Eureka注册服务中心的通信zone和url地址,每个值可以是单个URL,也可以是以逗号分隔的备选位置列表。通常,eureka服务器URL包含协议、主机、端口、上下文和版本信息(如果有)。示例:
eureka.client.serviceUrl.defaultZone=http://peer1:8761/eureka/,http://peer2:8763/eureka/
这些更改在运行时的下一个服务URL刷新周期(由eurekaserviceurlpollintervalseconds指定)时有效。

之前我们搭建高可用的时候就用defaultZone指定了相关的多个Eureka注册服务中心。

4、eureka.dashboard.enabled和eureka.dashboard.path
eureka.dashboard参数是管理eureka仪表盘的,有时候我们不需要显示仪表盘(例如多个eureka服务只需提供一个仪表盘),可以设置eureka.dashboard.enabled参数为false,有时候我们需要自定义仪表盘访问的地址,可以设置eureka.dashboard.path。

我们拿microserver-discovery-eureka项目做实验,之前我们访问http://localhost:8761/是可以看到Eureka的仪表盘首页的:

然后我们设置eureka.dashboard.enabled为false:

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@eureka1:8761/eureka
  dashboard:
    enabled: false

重启项目,然后再去访问上面的地址,发现就被拦截了:

仪表盘关闭成功。
我们把eureka.dashboard.enabled恢复为true,将eureka.dashboard.path设置为“/admin”:

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@eureka1:8761/eureka
  dashboard:
    enabled: true
    path: /admin

然后访问原地址异常,访问“/admin”得到了结果:

5、eureka.instance.appname
该参数表示注册在的Eureka服务中的应用名称。我们之前的user、movie都是注册在eureka上的,直接在eureka仪表板上看到的两个服务的Application名称是和Status里面一样的:

这里的Application名称取的是配置文件中的spring.application.name,为什么会默认取这个呢?我们看一下eureka.instance.appname配置的源码:

@ConfigurationProperties("eureka.instance")
public class EurekaInstanceConfigBean implements CloudEurekaInstanceConfig, EnvironmentAware {

    private static final String UNKNOWN = "unknown";

    private HostInfo hostInfo;

    private InetUtils inetUtils;

    /**
     * Default prefix for actuator endpoints
     */
    private String actuatorPrefix = "/actuator";

    /**
     * Get the name of the application to be registered with eureka.
     */
    private String appname = UNKNOWN;
    
    //中间代码省略......
    
    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
        // set some defaults from the environment, but allow the defaults to use relaxed binding
        String springAppName = this.environment.getProperty("spring.application.name", "");
        if(StringUtils.hasText(springAppName)) {
            setAppname(springAppName);
            setVirtualHostName(springAppName);
            setSecureVirtualHostName(springAppName);
        }
    }
    
    //后面代码省略......
}

可以看到,在setEnvironment方法中,会给一些空的属性设置一些值,可以看到如果appname、virtualHostName和secureVirtualHostName参数为空的话,都会被设置为spring.application.name的信息(前提是spring.application.name不为空,否则都是UNKONW)。

所以当我们去设置eureka.instance.appname的时候,仪表板上的Application就会变成我们设置的名称,而不是默认赋值为spring.application.name的名字了。我们测试一下:

将user的eureka.instance.appname属性设置为USER-SERVICE-HAHAHA:

eureka:
  instance:
    appname: USER-SERVICE-HAHAHA

然后重启user服务,等待30秒服务列表刷新,然后观察user服务对应的Application名称,发现成功改变:

设置appname还有一个作用,就是当我们使用swagger框架来自动生成API文档的时候,可能会出现与spring.application.name配置项冲突的情况,此时Application名称会变成UNKONW,所以最好配置上appname。
总结:appname才是最原始的注册到Eureka上的应用名称。

6、eureka.instance.hostname
该参数是设置服务注册中心实例的主机名,默认注册到服务中心显示的路径是hostname+appname+port(即鼠标放在Status项的链接地址),注意主机名要在hosts里面配置。
当配置了eureka.instance.prefer-ip-address为true的时候,意味着相较于hostname会优先使用IP,会导致上面的eureka.instance.hostname配置无效。
需要区分的是eureka.instance.instance-id是该实例注册到服务中心的唯一ID,这个是显示在Status栏目里的,和hostname的访问链接不是一码事。
还有一个eureka.instance.ip-address参数,是配置实例的ip地址,一般来说我们内网进行测试配不配置这个都可以,但是有些生产环境需要通过外网来访问该服务,通常设置为公网ip。

Eureka的配置解释以及常用配置说明就到这里了,在项目中遇到具体配置还需要具体分析。

参考:《51CTO学院Spring Cloud高级视频》

转载请注明出处:https://blog.csdn.net/acmman/article/details/99670419

  • 6
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Spring Cloud Eureka 是一款服务注册和发现的组件,它可以让开发人员更方便地创建分布式系统。下面是 Spring Cloud Eureka 配置的详细解释: 1. 引入依赖 在目的 pom.xml 文件中,需要添加以下依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 2. 配置文件 在配置文件中需要添加以下内容: ``` spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ ``` 这里定义了服务的名称和端口,以及 Eureka Server配置。其中,`register-with-eureka` 和 `fetch-registry` 的值都设置为 false,表示该服务既不需要注册到 Eureka 服务器上,也不需要从 Eureka 服务器上获取服务注册表信息。 3. 启动 Eureka ServerSpring Boot 应用程序中添加 `@EnableEurekaServer` 注解即可启动 Eureka Server。例如: ``` @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } ``` 4. 注册服务 在需要注册到 Eureka 服务器上的服务中,需要添加以下依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 在服务的配置文件中添加以下内容: ``` spring: application: name: service-hello eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ ``` 其中,`application.name` 的值为服务的名称,`eureka.client.service-url.defaultZone` 的值为 Eureka Server 的地址。 5. 启动服务 在服务的主类中添加 `@EnableDiscoveryClient` 注解,表示该服务需要注册到 Eureka 服务器上。例如: ``` @SpringBootApplication @EnableDiscoveryClient public class ServiceHelloApplication { public static void main(String[] args) { SpringApplication.run(ServiceHelloApplication.class, args); } } ``` 通过以上步骤,就可以使用 Spring Cloud Eureka 实现服务注册和发现了。 ### 回答2: SpringCloud EurekaSpringCloud的核心组件之一,它提供了一种服务治理的解决方案。在分布式系统中,服务之间的相互调用是不可避免的,Eureka可以管理服务之间的依赖关系,确保服务间的通信和服务的高可用性。本文将介绍SpringCloud Eureka配置详解。 一、Eureka Server配置 1. 引入Eureka Server依赖 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> ``` 2. 配置application.yml ```yaml server: port: 8761 spring: application: name: eureka-server profiles: active: dev eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: enable-self-preservation: false eviction-interval-timer-in-ms: 30000 response-cache-update-interval-ms: 30000 registry-fetch-interval-seconds: 5 prefer-same-zone-eureka: true ``` 注释: 1. serviceUrl.defaultZone 是 Eureka Server 上的服务 URL,这里是设置为本地的 URL。 2. server.enable-self-preservation 为是否开启自我保护模式,开启后会自动将当前实例加入到Eureka Server的服务列表中。 3. eviction-interval-timer-in-ms:清理失效节点的时间间隔,默认为 60 秒。 4. registry-fetch-interval-seconds:Eureka Server 获取注册表数据的间隔时间,默认为 30 秒。 5. prefer-same-zone-eureka:是否优先选择同一个 Zone 的实例。 二、Eureka Client配置 1. 引入Eureka Client依赖 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> ``` 2. 配置application.yml ```yaml server: port: 8080 spring: application: name: service-one profiles: active: dev eureka: instance: instance-id: ${spring.application.name}:${random.int} prefer-ip-address: true # 避免hostname无法访问 client: serviceUrl: defaultZone: http://localhost:8761/eureka/ fetch-registry: true register-with-eureka: true healthcheck: enabled: true server: wait-time-in-ms-when-sync-empty: 0 ``` 注释: 1. instance.instance-id:实例的名称,建议加上随机数,避免实例名冲突。 2. client.fetch-registry:是否从 Eureka Server 获取注册表。 3. client.register-with-eureka:是否将服务注册到 Eureka Server。 4. healthcheck.enabled:是否开启健康检查,开启后Eureka Server能够监测到服务是否存活。 5. 实际开发中常用的还有其他的配置参数,例如eureka.instance.ip-address,eureka.instance.non-secure-port等。 三、实现服务注册 1. 实现服务接口 ```java @Service public class UserServiceImpl implements IUserService { @Override public User getUserById(int id) { return new User(id, "Tom"); } } ``` 2. 添加@EnableDiscoveryClient注解 ```java @EnableDiscoveryClient @SpringBootApplication public class ServiceOneApplication { public static void main(String[] args) { SpringApplication.run(ServiceOneApplication.class, args); } } ``` 3. 在Controller中使用RestTemplate调用其他服务 ```java @RestController public class UserController { @Autowired private RestTemplate restTemplate; @GetMapping("/user/{id}") public User getUserById(@PathVariable int id) { String url = "http://service-two/user/" + id; return restTemplate.getForObject(url, User.class); } } ``` 四、小结 本文简要介绍了 SpringCloud Eureka 的基本配置,包括Eureka ServerEureka Client配置,以及服务注册的实现。在实际开发中,我们根据具体需要进行更加详细的配置和实现。SpringCloud Eureka作为SpringCloud微服务体系的核心组件之一,是服务治理的不二选择。 ### 回答3: Spring Cloud Eureka是一个开源的服务注册中心,用来解决微服务系统中服务的注册与发现问题。在微服务架构中,由于服务数量庞大,需要有一个中心化的服务注册与发现机制来协调各个服务之间的调用关系。Spring Cloud Eureka就是这样一个核心组件,它可以帮助我们管理和调度微服务。下面,我们就来详细了解一下Spring Cloud Eureka配置。 在Spring Boot中,我们可以使用@EnableEurekaServer注解来启用Eureka Server。具体配置如下: ```java @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } } ``` @EnableEurekaServer注解用来启用Eureka Server功能。Spring Boot应用启动后,Eureka Server也会自动启动。默认情况下,Eureka Server的端口号为8761。 接下来,我们需要在application.yml配置文件中添加如下配置: ```yaml server: port: 8761 # 指定Eureka Server的端口号 eureka: instance: hostname: localhost # Eureka Server的主机名,默认为localhost client: register-with-eureka: false # 是否向Eureka Server注册自己,默认为true fetch-registry: false # 是否检索服务列表,默认为true service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ ``` 在配置文件中,我们可以指定Eureka Server的端口号、主机名、服务注册与检索等参数。其中,register-with-eureka参数表示是否向Eureka Server注册自己,默认为true,如果我们不想在Eureka Server上注册自己,可以将该参数设置为false。fetch-registry参数表示是否检索服务列表,默认为true,如果我们不想从Eureka Server上检索服务列表,可以将该参数设置为false。service-url参数是Eureka Server的服务地址,可以指定多个服务地址,以逗号分隔。 在服务提供者中,我们也需要添加Eureka Client依赖,并进行相关配置。在build.gradle文件中添加如下依赖: ```gradle dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' } ``` 在application.yml配置文件中添加如下配置: ```yaml eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ # 指定Eureka Server的服务地址 spring: application: name: service-hello # 服务名称,必须唯一 ``` 在服务启动时,会通过Eureka ClientEureka Server注册自己,并提供服务。service-hello就是服务的名称,必须唯一。在客户端中,我们只需要使用服务名称来调用服务,Eureka Client会帮我们负责服务的发现和负载均衡。 以上就是Spring Cloud Eureka的基本配置。通过对Eureka ServerEureka Client配置,我们可以实现服务的注册、发现和负载均衡功能。在实际应用中,服务治理是微服务架构中不可或缺的一部分,Spring Cloud Eureka为我们提供了很好的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值