必要性
服务注册中心(我使用的是Eureka)是指,分布式系统中所有的服务都向注册中心注册,使服务之间可以进行便捷通信。
分布式系统中,服务注册中心是最重要的基础部分。
试想一下,若A服务想调用B服务的接口,单服务情况下,直接调用就可以了。但微服务中,某个服务往往是集群的,即同一个服务有多个。A想要找到诸多B服务中的可用的一个,若在A服务中一一调用是很不靠谱的做法,况且B服务的数量可能也会有所变化。
这时候,将所有启动的B服务注册到注册中心,A请求调用中心寻找B的一个服务就可以了。
两种注册中心
客户端发现
A服务获取所有的B服务,然后通过负载均衡机制(IP哈希,轮询,随机等)获取一个服务,然后调用。
简单直接,A可获得所有B服务信息,但需要自己实现逻辑
--Eureka
服务端发现
介入代理,A请求代理,代理从众多B服务中选择一个服务。
B服务对A不可见,但操作简便
--Nginx
--ZooKeeper
--Kubernetes
Eureka集成
server端
pom文件添加依赖(cloud Greenwich.SR2版本)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
启动类添加注解
@EnableEurekaServer
application配置文件
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# register-with-eureka: false
server:
enable-self-preservation: false
server:
port: 8761
defaultZone:Eureka服务端地址,服务端也要填写
register-with-eureka:服务端是否显示自身,若为false,项目启动后浏览器不会显示服务端的注册;若为true,则会在列表看到服务端的注册信息
enable-self-preservation:自我保护机制,心跳检测,低于某个数值则注销服务
客户端
pom添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动类添加注解
@EnableEurekaClient
application配置文件
spring:
application:
name: client-name
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
浏览器显示的注册名称是如上配置的client-name
启动项目
启动会报个错误,因为服务端也是客户端,启动时寻找不到服务端所致,无需担心
浏览器输入localhost:8761
Eureka高可用
一般eureka都是布置多个的,若一个挂掉后不会影响正常使用
做法就是eureka的defaultZone写除本身外所有其他的eureka,使用逗号隔开
客户端的defaultZone写所有的eureka