Spring Cloud 之 Service Registry
目前使用的较多的是Eureka和consul,这里使用eureka作为服务注册中心。Eureka是Netflix开源的一款产品,它提供了完整的Service Registry和Service Discovery实现,Spring Cloud Eureka就是基于它开发的,不过目前2.x已经停止开源了,但是并不影响,大多数公司目前还是使用的1.x版本。
背景
为什么需要服务注册中心,它有什么作用?
在项目分布式之后,各个服务之间的调用就会变得异常复杂,如果这个歌时候修改其中某个服务,那么跟它相关的所有服务都需要更新一遍,这样很麻烦并且容易出错。服务注册中心可以让开发者无需关心需要调用的服务的地址,统一从注册中获取可以调用的服务再去调用服务即可。所有服务都在服务注册中心进行注册,这样就可以很方便的通过注册中心对每个服务进行监控。
Eureka的架构
- Eureka Server
- Eureka服务器,提供服务注册与发现的功能
- Service Provider
- 服务提供者
- 讲自己注册到注册中心,让其他服务能够发现
- Service Consumer
- 服务消费者
- 从Eureka获取服务列表用于消费
步骤
- 新建一个SpringBoot工程
引入Eureka核心依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 编写配置
server:
port: ${EUREKA_PORT:8761}
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
default-zone: http://${EUREKA_ZONE_HOST:localhost}:${EUREKA_ZONE_PORT:8761}/eureka/
# 开发环境关闭自我保护模式
server:
enable-self-preservation: false
logging:
file: log/eureka-server.log
- 添加启动注解
在启动类上添加@EnableEurekaServer
注解,用于启动
@SpringBootApplication
@EnableEurekaServer
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
- 启动应用
启动应用后,访问localhost:8761,就可以看到Eureka的界面了,可以看到此时还没有任何服务注册。
总结
Eureka的基本搭建比较简单,但是单注册中心在生产环境中不能做到高可用,一旦挂了就会影响整个系统,所以在线上需要多个Eureka互相注册以达到高可用。