启动SpringCloudEureka 报异常
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
原因是 Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为。
在application.yml 添加配置:
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
registerWithEureka和fetchRegistry的默认值都是true,他们都是客户端配置,也就是eureka.client开头的配置信息。
通过上述说明就很好理解这两个参数设置与否的区别了:
- registerWithEureka:是否要注册到其他Server上。如果我的Server上其实开放了一些Http接口供调用,那么就需要注册,这样其他的Client才能发现我的服务,才能通过RPC调用我提供的Http接口。如果我的Server没有提供对外Http接口,那么这个参数可以设置为false。
- fetchRegistry:是否需要拉取服务信息。和是否注册一样,如果我的Server需要调用其他的Client的Http接口,那么就需要获取相应的服务发现信息,这样才能正常的调用。同时这个参数还有一个重要的作用,就是决定Server在初始化时是否立即全量同步其他节点的服务信息!!!Server初始化时会先初始化其内置的Client。若配置了fetchRegistry=true,那么Client在初始化时会从其他Server全量拉取服务信息,放进Client容器中。Server在初始化时会尝试同步Client容器里的服务信息,如果fetchRegistry=false,服务信息不存在,只能被动的等其他Server节点以增量的形式同步过来(Client在执行注册和心跳时对应的注册Server节点会广播此事件,同步给其他的Server节点。当其他Server节点还没有此服务信息时,改为注册此服务信息)。当然正常的通过心跳来同步,最多也仅需要30S而已,是否需要设置此参数就看各自的需求了。
看到其他文章还需要配置
server:
waitTimeInMsWhenSyncEmpty: 0
这个配置完全不需要,
waitTimeInMsWhenSyncEmpty配置作用:在Eureka服务器获取不到集群里对等服务器上的实例时,需要等待的时间,单位为毫秒,默认为1000 * 60 * 5
亲测有效!!
具体springcloud eureka配置详解 可以看我下一篇博客!!