服務註冊中心
1、Eureka
什麼是服務治理?
Spring Cloud 封裝了Netflix 公司開發的Eureka 模組來實現服務治理
在傳統的RPC遠端呼叫框架中,管理每個服務與服務之間依賴關係比較複雜,管理比較複雜,所以需要使用服務治理,管理服務與服務之間的依賴關係,可以實現服務呼叫、負載均衡、容錯等,實現服務發現與註冊。
什麼是服務註冊與發現
Eureka採用了CS的設計架構,Eureka Server作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用Eureka的客戶端連線到Eureka Server並維持心跳連線。這樣系統的維護人員就可以通過Eureka Server來監控系統中各個微服務是否正常執行。
在服務註冊與發現中,有一個註冊中心。當伺服器啟動的時候,會把當前自己伺服器的資訊比如服務地址,通訊地址等以別名方式註冊到註冊中心上。另一方(消費者|服務提供者),以該別名的方式去註冊中心上獲取到實際的服務通訊地址,然後再實現本地RPC呼叫RPC遠端呼叫框架核心設計思想:在於註冊中心,因為使用註冊中心管理每個服務與服務之間的一個依賴關係(服務治理概念)。在任何RPC遠端框架中,都會有一一個註冊中心(存放服務地址相關資訊(介面地址)
Eureka包含兩個元件: Eureka Server和Eureka Client
Eureka Server 提供服務註冊服務
各個微服務節點通過配置啟動後,會在Eureka Server中進行註冊,這樣Eureka Server中的服務登錄檔中將會存 儲所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀看到。
Eureka Client通過註冊中心進行訪問
是一個Java客戶端,用於簡化Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將 會從服務登錄檔中把這個服務節點移除(預設90秒)
1.1、Eureka 單機版使用
-
改Pom 新增依賴
<!--eureka-server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--eureka client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
改appliation.yml
# eureka server 端 server: port: 7001 eureka: instance: hostname: localhost # eureka 服務端的例項名稱 client: # false 表示不向註冊中心註冊自己 # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務 register-with-eureka: false service-url: # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # eureka client 端 eureka: client: # true 表示將自己註冊金 EurekaServer 預設為true register-with-eureka: true # 是否從 EurekaServer 抓取已有的註冊資訊,預設為true。 單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡 fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka
-
主啟動類添加註解
@EnableEurekaServer
和@EnableEurekaClient
1.2、Eureka 叢集版使用
-
server
# 注意,兩個相互註冊,相互守望 # 第一個 Eureka server: port: 7001 eureka: instance: hostname: eureka7001.com # eureka 服務端的例項名稱 client: # false 表示不向註冊中心註冊自己 # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務 register-with-eureka: false service-url: # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址 defaultZone: http://eureka7002.com:7002/eureka/ # 第二個 Eureka server: port: 7002 eureka: instance: hostname: eureka7002.com # eureka 服務端的例項名稱 client: # false 表示不向註冊中心註冊自己 # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務 register-with-eureka: false service-url: # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址 defaultZone: http://eureka7001.com:7001/eureka/
-
Client
# 其他不變,只在 defaultZone 那裡新增兩個 Eureka eureka: client: # true 表示將自己註冊金 EurekaServer 預設為true register-with-eureka: true # 是否從 EurekaServer 抓取已有的註冊資訊,預設為true。 單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡 fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka # defaultZone: http://localhost:7001/eureka # 單機版
-
主啟動類添加註解
@EnableEurekaServer
和@EnableEurekaClient
-
@LoadBalanced
給 RestTemplate 新增這個註解 實現負載均衡。