[Spring Cloud]Eureka服务器配置

除了那些基本依赖,要添加:(旧版)

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.0.RELEASE</version>
        </dependency>

 不要忘记<version>,否则在intellij idea构建后里面会变成unknown,然后导入依赖失败。

注意,最新版本console提示spring-cloud-starter-eureka-server过期了,建议更换成:(新版)

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

 这个version是要根据

spring-boot-starter-parent

 的版本而确定的

关键不要漏了:(所有的资料都没有提到需要配置这个,可能旧的版本是不需要的,但是新的版本没有是不行的)

<repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

 之前一直缺少配置这个,导致一直报错,启动不了tomcat,按照spring.io里面的guide配置上这个就可以了。

参考官方的guide:https://projects.spring.io/spring-cloud/

一.server properties配置:

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

or yaml:

server:
  servlet:
    context-path: /demo
  port: 1111
client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
 *注意,最新版本的service url不是旧版的serviceUrl,而是service-url,defalutZone一样,不要写成其他格式,eureka只会识别这种,而且代码提示是不会显示的.

 *这里配置错误的话,客户端是会一直注册失败的.

参考源码:https://github.com/spring-cloud/spring-cloud-netflix/blob/ab87e735adeb3875a03dc143e92a3fe2c958fd63/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java#L237

里面就定义了格式:

public static final String DEFAULT_ZONE = "defaultZone";

 根据以上定义,打开server eureka的url: http://localhost:1111/demo,不是default zone的url

二.client配置:

除了基本的spring cloud依赖,还要:

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<version>1.4.0.RELEASE</version>
		</dependency>

 properties:

spring.application.name=hello-service

server.servlet.context-path=/client
server.port=8222

eureka.client.service-url.defaultZone=http://localhost:1111/demo/eureka

 defaultZone要和server的一样,为什么有/demo,是因为server配置了context-path: /demo

同理,如果server也配置并使用了application-dev.yaml那么client的defaultZone就需要跟着更换端口等配置了

成功后可以在server 的eureka里面看到client项目.

注意事项:

因为依赖包较多,build起时可能出现找不到classpath的情况,只需要clean一下maven即可,如何在intellij里面clean maven可以参考另外一篇文章.

参考官方guide:https://spring.io/guides/gs/service-registration-and-discovery/