服务的注册与发现
定义
服务的注册就是维护一个登记簿,其管理系统内的所有服务地址。当新的服务开启后,会向注册中心提供其对应的地址信息。服务的依赖方直接向注册中心申请地址信息。
服务注册方式
客户端注册
- 定义:服务本身作为客户端向服务注册中心登记自己的信息。当服务开启时,主动向服务注册中心登记信息。服务下线时,主动发起请求删除已注册的信息。 服务注册之后,依据探测策略,实时确保服务的状态。【探活】
- 不足:各个客户端需要实现自己的注册逻辑。客户端服务域名注册服务中心耦合。
graph LR
A1[Service-instance]
A1-->B[Register center]
A2[Service-instance]
A2-->B[Register center]
第三方注册
- 独立的Register 进行服务的注册与销毁。当服务启动后主动向Register发送信息。而后由Register 向注册中心登记服务信息.
- 不足:register 必须要确保其高可用,否则注册中心无法工作
graph LR
A1[Service-instance]
A2[Service-instance]
A1-->B[independent-Register]
A2-->B[independent-Register]
B-->C[Register center]
服务注册组件
服务发现方式
客户端发现
- 定义: 客户端发现是指由客户端主动从注册中心获取查询可应用的服务信息,以及负载均衡,从而直接调用应用服务。
- 不足:每个客户端可能需要设定对应的应用查询逻辑
graph LR
A[CLient]-->B[Register]
C[Service instance]
D[Service instance]
B-->C & D
服务端发现
- 定义:服务端发现需要定义一个额外的Router,请求先调用Router,而后由Router进行服务的查询与负载均衡。
- 不足:需要Router是高可用状态
graph LR
A[CLient]-->B[Router]
C[Register]
D[Service instance]
E[Service instance]
B-->C
C-->D & E
服务注册实例
Eureka 实例注册
注册服务构成
- Eureka service register center 配置文件信息
#应用端口号设定
server.port=8761
#作为服务注册中心,不需要将自己本身作为客户端进行注册,因此设定为false
eureka.client.registerWithEureka=false
#项目build中不需要获取注册中心的信息,设定值为false
eureka.client.fetchRegistry=false
#设定安全机制
spring.security.user.name=eureka
spring.security.user.password=eureka123456
- Eureka client production
spring.application.name=my-eureka-producer
server.port=0
eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
eureka.instance.preferIpAddress=true
- Eureka client consumer
# 应用名称
spring.application.name=my-eureka-consumer
server.port=8080
# register service 的地址
eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
Zookeeper 实例注册
- 安装zookeeper服务 Mac install
- 1.1 homebrew install
brew install zookeeper - 1.2 查看安装后的信息
brew list zookeeper - 1.3 查看zookeeper信息
brew info zookeeper - 1.4 zookeeper的启动
前台启动
zkServer start
后台方式启动
brew services start zookeeper - 1.5 停止服务
zkServer stop
brew services stop zookeeper
-
默认zookeeper没有提供其对应web端管理。因此更安装第三方软件软件实现zookeeper的在线网页版查看管理
-
应用注册
- 3.1 消费端应用属性文件配置
logging.level.org.apache.zookeeper.ClientCnxn=WARN
# zookeeper服务器地址
spring.cloud.zookeeper.connect-string=localhost:2181
server.port=8003
- 3.2 生产端应用属性文件配置
spring.application.name=my-zookeeper-producer
server.port=8082
# 服务是否注册
spring.cloud.zookeeper.discovery.enabled=true
spring.cloud.zookeeper.connect-string=localhost:2181