[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/