我们知道在spring boot中有一套服务注册中心的机制Eureka,他的作用是:
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。
为什么要使用Eureka,因为在一个完整的系统架构中,任何单点的服务都不能保证不会中断,因此我们需要服务发现机制,在某个节点中断后,其它的节点能够继续提供服务,从而保证整个系统是高可用的。
而我们这次主要讲的是和Eureka类似的一个管理服务注册的工具的,但他比eureka有优势。
我们就直接进入主题吧,首先去consul官网下载consul的安装包,我这边以windows举例,建议别下载1.0的版本的,最好下载1.0之前的ps(现在为止)。因为1.0好像会导致服务注册不上去。
下载解压后,修改一下我们的环境变量,修改完成后执行consul agent -dev,然后访问localhost:8500能看到如下页面
就表示已经成功了。
这样我们就把我们注册中心给搭建完毕了,接下来我们就要将我们的服务给挂上去,也就是注册上去。
我们以上一节的服务客户端为例,既然讲了也就需要整合在一起,首先我们需要去配置注册中心的配置,我们要 在我们server-服务代码里面配置的,但是我们的服务的配置现在都放在github上面了,所以我们直接在github上面配置就可以了
可以在test-dev里面增加如下配置:
spring.colud.consul.host=localhost
spring.colud.consul.port=8500
spring.cloud.consul.discovery.tags=dev
spring.colud.consul.discovery.healthCheckInterval=15s
配置注册中心的ip和端口号,以及启动的是dev。healthCheckInterval表示每15秒检查一次,配置 Consul 健康检查频率,也就是心跳频率。
配置完成后,我们还要在maven里面添加我们需要的jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
consul-discovery这个包主要关于注册中心的,而下面的那个是关于健康检查的包。
这里导入完毕后,我们还需要在我们的启动类上面加上这个注解@EnableDiscoveryClient,
然后启动我们的项目,记住这个客户端是依赖于服务端的,所以启动的时候这两个都要启动起来,同时一定要保证我们的consul在启动,否则会报错。一切启动完毕后我们就能在consul看到如下界面
这样就代表我们注册成功了,然后我们之后就可以直接通过服务名也就是注册上面显示的名字来访问服务,而不需要关注服务的具体ip和端口。这样的好处就是可以达到负载均衡,因为一个服务可以对应着多个实列,然后他根据服务名找,同一个服务名可能对应几个id和端口,那么就可以进行负载均衡。