1、服务器端搭建
Eureka分为客户端和服务器端。我们首先创建一个服务器端服务。
如下图表示:
创建成功后的目录结构为:
系统的配置为application.properties,建议采用yml文件,因此我将application.properties重命名为application.yml。增加如下配置:
server:
port: 8761 #服务端口号
eureka:
client:
register-with-eureka: false #由于当前Eureka应用为服务端,因此设置当前用户不进行注册。防止自己向自己注册发生异常
fetch-registry: false #由于注册中心主要是维护管理实例,因此它并不需要去检索服务实例,因此也设置为false
service-url:
defaultZone: http://localhost:8761/eureka/ #设置向注册中心注册服务的地址
server:
enable-self-preservation: true #启动自我保护模式,默认是开启的,可以不设置。
修改启动类EurekaServerApplication.java,增加Eureka服务的注解
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
然后就可以启动服务测试是否设置成功。访问http://localhost:8761 如果显示如下界面,表示服务设置成功。
2、客户端搭建
服务器端创建完成后,我们开始创建客户端。Eureka客户端需要伴随着其他应用一起,因此我们设置Eureka客户端时,不能只依赖Eureka这个应用,还需要依赖其他应用,如Web应用或Zuul应用等。如下图表示:
我这里设置了两个应用,分别是Web和Eureka Disconvery。Eureka Disconvery即Eureka客户端应用的服务。创建完成后,结构如下:
我们首先修改application.properties文件为application.yml文件,然后增加上Eureka客户端的配置,代码如下:
server:
port: 1234 #配置端口号
eureka:
instance:
appname: client #配置客户端在Eureka服务器端中的名称
client:
service-url:
defaultZone: http://localhost:8761/eureka/ #设置向注册中心注册服务的地址
然后修改客户端的启动文件EurekaClientApplication.java文件,增加Eureka客户端的配置信息,代码如下:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
然后启动项目,访问服务器http://localhost:8761,如果显示如下内容表示客户端部署成功。
3、部署过程中遇到的问题
1、SpringCloud从2.0开始兼容JDK1.9,但是由于JDK1.9采用模块块编程,因此会缺少某些JAR包,需要单独引入,因此建议大家先用jdk1.8进行学习。
2、SpringCloud2.xxx.xx同SpringCloud1.xxx.xxx区别比较大。我用的1.5.15版本中,不论是服务器端还是客户端,都是通过spring-cloud-starter-eureka-server这个来实现的。而在2.0.6版本中,服务器端是通过spring-cloud-starter-netflix-eureka-server实现的,而客户端是通过spring-cloud-starter-netflix-eureka-client实现的。
3、在SpringCloud1.5.15版本中,启用Eureka客户端是通过@org.springframework.cloud.netflix.eureka.EnableEurekaClient这个注解来实现。而到了2.0.6中,启用Eureka客户端即可以通过@org.springframework.cloud.netflix.eureka.EnableEurekaClient来实现,也可以通过@org.springframework.cloud.client.discovery.EnableDiscoveryClient来实现。建议在2.0.6中通过org.springframework.cloud.client.discovery.EnableDiscoveryClient来实现。
4、在进行 搭建的时间,一定要选择JDK而不是JRE。因此用JRE总是会出现客户端无法将服务注册到服务器端的问题,而且会报com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 异常。一开始一起以为是配置的问题,后面才发现编译环境用的JRE的问题。因此当大家发现 Cannot execute request on any known server这个错误时,如果确认自己的配置没有错误,可以查看一下环境的配置,看看是通过jre编译还是通过jdk编译的。
5、register-with-eureka: false用于设置当前服务是否需要注册到Eureka服务中。如果设置为false,此服务将不会注册到服务器。我学习时网上有很多资源将这个设置加到了客户端,造成在Eureka中找不到相关的服务,因此这里需要大家注意一下。
6、 prefer-ip-address用于设置注册到Eureka服务中时是否显示本服务的IP地址。如果不设置为true,在Eureka服务中将显示本机的服务名称。