目录

服务注册服务发现-Eureka

服务注册/服务发现-Eureka

目的:解决微服务在调用远程服务时URL写死的问题

注册中心

https://i-blog.csdnimg.cn/direct/2e3cfd349ccc4172a34a29566cfd9c17.png

服务提供者(Server):一次业务中,被其他微服务调用的服务,也就是提供接口给其他微服务。

服务消费者(Client):一次业务中,调用其他微服务的服务,也就是调用其他微服务提供的接口

服务注册中心(Register):用于保存Server的注册信息,当Server节点发生变更时,Register会同步变更,服务与注册中心使用一定机制通信,如果注册中心与某服务长时间无法通信,就会注销该实例。

关系:

服务注册:服务提供者在启动时,想Register注册自身服务,并向Register定期发送心跳汇报存活状态

服务发现:服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口,服务发现的一个重要作用就是提供给服务消费者一个可用的服务列表

CAP理论

https://i-blog.csdnimg.cn/direct/4ed2ee802b8d4e0f8426ddc87beb90d3.png

一致性(Consistency):CAP理论中的一致性,值的是强一致性,所有节点在同一时间具有相同的数据

可用性(Availability):保证每一个请求都有响应(结果不保证)

**分区容错性(Partition Tolerance) :**当出现网络分区后,系统任然能够对外提供服务

分布式系统中, 系统间的⽹络不能100%保证健康, 服务⼜必须对外保证服务. 因此Partition

Tolerance不可避免. 那就只能在C和A中选择⼀个. 也就是CP或者AP架构

Eureka

Eureka是Netflix开发的基于REST的服务发现框架, 主要⽤于服务注册, 管理,负载均衡和服务故障转移. 官⽅声明在Eureka2.0版本停⽌维护, 不建议使⽤. 但是Eureka是SpringCloud服务注册/发现的默认实现, 所以⽬前还是有很多公司在使⽤

搭建EurekaServer:

引入依赖:


<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

server:
 port: 10010
spring:
 application:
 name: eureka-server
eureka:
 instance:
 hostname: localhost
 client:
 fetch-registry: false # 表⽰是否从Eureka Server获取注册信息,默认为true.因为这是
⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这⾥设置为false
 register-with-eureka: false # 表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于
当前应⽤就是Eureka Server,故⽽设置为false.
 service-url:
 # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.
 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

服务注册:


<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

spring:
 application:
 name: product-service
eureka:
 client:
 service-url:
 defaultZone: http://127.0.0.1:10010/eureka

远程调用:


<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

spring:
 application:
 name: product-service
eureka:
 client:
 service-url:
 defaultZone: http://127.0.0.1:10010/eureka

配置RestTemplate对象,用于发起URL远程调用请求

https://i-blog.csdnimg.cn/direct/49d33bfe488d47589fb84ad3d85c73cf.png

https://i-blog.csdnimg.cn/direct/e4535ca5d8734560b6b11a9407a14511.png

根据url和返回值的类调用远程接口

https://i-blog.csdnimg.cn/direct/d1775fb55efc4ed79dc7a48003d41dc9.png

获取远程实例,instances[index].getUri()可以获取IP+端口号

负载均衡

https://i-blog.csdnimg.cn/direct/9605e17754324cc0a463e37801fe8625.png

配置负载均衡所需访问的服务名 configuration配置均衡策略

https://i-blog.csdnimg.cn/direct/3e09cbe6e79a4edd9e2ee9f262a9f9cc.png

IP+端口号直接用注册中心的服务名代替