上节课我们一起学习了如何搭建一个Eureka Server,这节课我们一起来学习一下如何将微服务注册到Eureka Server上。
关于如何操作Eureka,我们可以参考spring-cloud的官方文档,我们先访问spring-cloud的官网主页,如下图所示,目前官网Spring Cloud的最新版本是Camden SR5,我们开发用的也是最新版本,因此我们要查看的文档也是最新版本的文档,我们点击"Reference"。
点击上图Camden SR5后面的"Reference"之后,我们可以看到如下图所示的界面,我们点击左侧导航树中的"Spring Cloud Netflix",该树形下有注册所需要的步骤,第一步便是"How to include Eureka Client",便可以看到下图中右侧的内容,在蓝色圈住的内容中说明了如何在pom.xml文件中将服务注册到Eureka Server当中。
第一步:我们先把user服务注册到Eureka当中,我们打开user服务的pom.xml文件,添加一个依赖,如下图所示。
第二步:在启动类中添加@EnableEurekaClient,官网说明如下图所示。@EnableEurekaClient这个注解只用于Eureka做为服务发现组件,而@EnableDiscoveryClient则可用于所有的服务发现组件(包括ZK、Consul等)
既然知道了要在启动类中添加注解,那么我们便打开user微服务的启动类并添加相应的注解如下图所示。
第三步:在application.yml配置文件中添加相关配置,官网说明如下图所示。
我们把这段配置粘贴到user微服务的application.yml文件当中,如下图所示。
下面我们启动用户微服务(到启动类中启动,注意:这时eureka工程要保持启动),启动完之后,我们再次访问http://localhost:8761,如下图所示。
从上图可以看到有几个问题,其中第一个问题就是Eureka进入了自我保护模式,自我保护模式是Eureka的重要特性。进入自我保护模式是最直观的体现,是Eureka Server首页输出的警告。关于自我保护模式大家可以参考:http://www.itmuch.com/spring-cloud-sum/understanding-eureka-self-preservation/#more这篇博客进行学习。
由于单机模式经常会因为环境问题使Eureka进入自我保护模式,因此我们先关闭Eureka的自我保护功能并配置Eureka Server清理无效节点的时间间隔。如下图所示。
服务发现的第二个问题便是注册的实例名称显示的是"UNKNOWN",第三个问题是在状态一列默认显示的是UP(1)-localhost:7900,鼠标放到状态之上不会显示出IP地址。这两个问题可以通过在application.yml中配置进行解决,如下图所示。spring.application.name=microservice-provider-user这句配置可以解决第二个问题,eureka.instance.prefer-ip-address=true这句配置可以解决第三个问题。
配置完之后,我们重新启动eureka server和user微服务,这时我们再访问http://localhost:8761,如下图所示,可以看到我们的user微服务已经被成功注册进来了。
下面我们看一下用户认证的问题,我们从上面看到我们访问http://localhost:8761直接便可以访问到界面,这明显不符合安全。那么我们如何配置才能让用户输入用户名和密码后进行登录呢?
1.在eureka工程的application.yml文件中添加如下图右侧红色框住的配置,修改defaultZone访问链接地址。
2.打开eureka工程的pom.xml文件并添加如下图红色框住的依赖。
修改完之后我们重启eureka server,我们再访问http://localhost:8761,这时便需要我们先输入用户名和密码才能访问,如下图所示。
我们在上图输入完用户名user和密码password123之后,便可以访问到eureka首页了,如下图所示(由于我已经关掉了user微服务,因此现在eureka上没有任何实例)
由于上面eureka server已经添加了用户认证,这时如果我们直接启动eureka client(user微服务)的话会报错,我们也需要给客户端添加认证,方法是修改访问路径,如下图所示(访问路径与eureka server配置的一样)。
这时我们再启动user微服务,启动成功后我们再访问http://localhost:8761,可以看到客户端已经成功在eureka server上显示了。
下面我们来看看Spring Boot应用的健康监控,所用到的库是spring-boot-starter-actuator,这个库让我们可以访问应用的很多信息,包括:/env、/info、/metrics、/health等。
我们在user微服务的pom.xml文件中添加如下图所示的依赖。
添加完上面的依赖之后,我们重新启动user微服务,在启动信息中我们可以看到和以前启动不一样的一些信息,如下图所示,这些都是健康检查的访问路径。
我们以其中的health为例,我们可以访问地址:http://192.168.153.1:7900/health(注意:192.168.153.1是我电脑的IP,大家的IP都不一样,用自己的IP访问即可),如下图所示,可以看到一些health方面的检查信息。当然,我们还可以查看其它一些信息,这里就不一一举例了。
下面我们来学习一下如何去得到eureka server的服务实例,我们需要在Controller类加入以下内容。
我们重新启动user微服务,启动后访问地址:http://192.168.153.1:7900/eureka-instance,我们可以看到如下图所示的界面,我们发现确实得到了eureka server的服务路径。
下面我们再在Controller类中添加一个访问方法,如下图所示。
重新启动user微服务,然后我们访问路径:http://192.168.153.1:7900/instance-info,可以看到如下图所示的信息,可以发现,我们获得的信息更多。
我们还可以在eureka客户端配置安全检查,但前提是配置了pom依赖中配置了spring-boot-starter-actuator(我们已经在user微服务配置过了),我们在user微服务的application.yml中配置安全检查,如下图所示。
下面我们把movie微服务也注册到eureka中,首先我们在movie的application.yml文件中做如下配置
接着我们修改movie微服务的pom文件,如下图所示,添加红色框住的依赖。
下面我们需要在movie的启动类中添加注解,如下所示。
下面我们便启动movie微服务,然后访问eureka首页,可以看到如下图所示的界面,可以看到现在user和movie微服务都已经成功注册到eureka服务上来了。
本节课我们便一起学习到这里。