目的:解決微服務在調用遠程服務時URL寫死的問題
注冊中心
服務提供者(Server):一次業務中,被其他微服務調用的服務,也就是提供接口給其他微服務。
服務消費者(Client):一次業務中,調用其他微服務的服務,也就是調用其他微服務提供的接口
服務注冊中心(Register):用于保存Server的注冊信息,當Server節點發生變更時,Register會同步變更,服務與注冊中心使用一定機制通信,如果注冊中心與某服務長時間無法通信,就會注銷該實例。
關系:
服務注冊:服務提供者在啟動時,想Register注冊自身服務,并向Register定期發送心跳匯報存活狀態
服務發現:服務消費者從注冊中心查詢服務提供者的地址,并通過該地址調用服務提供者的接口,服務發現的一個重要作用就是提供給服務消費者一個可用的服務列表
CAP理論
一致性(Consistency):CAP理論中的一致性,值的是強一致性,所有節點在同一時間具有相同的數據
可用性(Availability):保證每一個請求都有響應(結果不保證)
分區容錯性(Partition Tolerance) :當出現網絡分區后,系統任然能夠對外提供服務
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: localhostclient:fetch-registry: false # 表?是否從Eureka Server獲取注冊信息,默認為true.因為這是
?個單點的Eureka Server,不需要同步其他的Eureka Server節點的數據,這?設置為falseregister-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遠程調用請求
根據url和返回值的類調用遠程接口
獲取遠程實例,instances[index].getUri()可以獲取IP+端口號
負載均衡
配置負載均衡所需訪問的服務名 configuration配置均衡策略
IP+端口號直接用注冊中心的服務名代替