1 创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,Eureka 是一个服务注册和发现模块。
1.1 创建maven工程
这样工程就创建完成了。
1.2 启动服务注册中心
在启动程序出加上@EnableEurekaServer注解即可
1 |
|
这时候启动程序会报错
这是因为eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server既是一个server也是一个eureka client ,对于一个client来说必须要指定一个 server。
配置application.yml文件,把自己注册到自己上就可以(应用刚启动可能注册不上,注册的过程是一个发送心跳的过程,隔一段时间就会进行注册,这时候就会注册成功)
再启动还是有错误的,因为在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为。使用
register-with-eureka: false
和
fetch-registry: false
禁止掉即可
1 | eureka: |
1.3 创建服务提供者–eureka client
创建工程的过程与上面类似,选择Cloud Discovery—>Eureka Discovery即可
加@EnableDiscoveryClient注解声明这是一个client
1 |
|
application.yml中的配置
1 | eureka: |
启动服务(确保你上面的配置的server是启动中的,要不然找不到注册服务的服务中心),发现服务启动完成立即终止,也不会去向服务端注册
需要添加如下的依赖
1 | <dependency> |
再启动服务,发现在server端已经注册完成了
当你频繁启动的时候,会发现包如下的提示:
这是因为client与server端使用的是心跳机制,server端会不断的去检测client是否存活,会统计一个上线率,当低于某个值时就会出现上面的提示。开发环境下可以把他关掉,但是生产环境下务必保持开启。
在server端的yml添加如下配置:
1 | server: |
1.4 Eureka的高可用
其实上面的配置是单体的,就是一个client向一个server注册,当这个server崩溃时服务补救挂掉了吗。怎么解决?可以多建立几台服务器,部署多个Eureka,然后向多个Eureka server之间互相注册。
配置两个服务,然后设置不同的端口。
然后启动的时候把server-port注释掉,启动EurekaApplication1,EurekaApplication1的配置如下:
1 | eureka: |
启动EurekaApplication2,EurekaApplication2的配置如下:
1 | eureka: |
启动客户端,客户端的注册地址只有 http://localhost:8761/eureka/,但是分别打开 http://localhost:8761和 http://localhost:8762我们发现client在两个server端都注册了,这是因为两个Eureka的server互相注册,当client注册到Eureka-server1时会同时同步到Eureka-server2上。这个时候Eureka-server1挂掉也是没关系的。
但是Eureka-server1挂掉之后,在重新注册client是注册不上的,因为一开始的时候注册地址只有Eureka-server1,所以要想Eureka-server1挂掉之后,重新注册client,只要注册地址多加一个Eureka-server2的地址即可。
1 | eureka: |
要是有更多个server时,server之间两两注册即可。