除了那些基本依赖,要添加:(旧版)
<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/