概念
当一个大型系统拥有很多服务时,往往需要一个服务注册中心来管理这些服务,它可以提供如下功能:
登记每个服务提供的功能
检测每个服务是否可用,不可用的服务剔除
服务间互相调用时,通过服务注册中心很容易找到目标服务
如下图,商城系统通过服务注册中心管理其中的若干服务:
机制
服务注册中心如何实现呢,其实并不复杂,简述如下:
服务注册中心本身也是一个服务应用,可以对外交互,也可以存储运算
系统中每个服务启动时将自身的功能登记到服务注册中心
服务注册中心定时发送心跳,看看登记的服务是不是可用,不可用的就剔除
因为服务注册中心登记了所有服务及其功能,所以每个服务只需要连接到注册中心,就能调用其他所有服务了
Spring Cloud Eureka 实现服务注册中心
Spring Cloud提供了基于Netflix Eureka的服务注册中心实现,可以轻松的实现服务注册中心应有的功能,Spring Cloud Eureka服务注册中心实现过程如下:
1、构建SpringBoot应用,并引入依赖
org.springframework.cloud
spring-cloud-starter-eureka-server
eureka-server依赖即引入了Eureka服务注册中心,此时我们可以根据项目需求来定制我们自己的服务注册中心了。
2、修改启动类,启动注册中心功能
通过在SpringBoot启动类上添加@EnableEurekaServer注解,就可以启动服务注册中心功能,此时注册中心启动后,可以监听其他服务发送过来的登记请求,并可以通过心跳检测登记服务是否存活。
@SpringBootApplication // 启动SpringBoot应用
@EnableEurekaServer // 启动服务注册中心
public class EurekaServerDemo {
public static void main(String[] args) {
SpringApplication.run(EurekaServerDemo.class, args);
}
}
3、修改注册中心配置
可以通过修改配置文件application.properties,指定注册中心的服务端口等信息。
# 指定注册中心的服务端口
server.port=1001
# 是否向注册中心注册自己,由于我们的注册中心不提供具体服务,所以不必注册自己
eureka.client.register-with-eureka=false
# 是否从注册中心获取其他服务信息,由于我们的注册中心仅提供注册功能,不必调用其他服务,所以不必获取其他服务信息
eureka.client.fetch-registry=false
4、启动服务注册中心
直接运行启动类即可启动服务注册中心,此时我们在浏览器输入http://localhost:1001,可以发现服务注册中心已启动,暂时还没有服务登记到该注册中心。