1. 程式人生 > >SpringCloud實戰微服務之——服務發現與服務註冊(二)-Eureka的簡單使用

SpringCloud實戰微服務之——服務發現與服務註冊(二)-Eureka的簡單使用

服務發現元件Eureka簡介

服務發現元件可以使用ZK ,也可以使用Consul,之所以Eureka使用最多有如下的原因導致:

Eureka來自生產環境。
Spring  CloudEureka的支援很好。
Eureka簡介:
EurekaNetflix開發的服務發現元件,本身是一個基於REST的服務,主要用於定位執行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。Spring cloud將它整合在子專案spring-cloud-netflix中,以實現Spring Cloud的服務發現功能。
Eureka 專案相當活躍,程式碼更新相當頻繁。
Eureka原理:(具體可以參考

GitHubEureka)
RegionZone的關係:

Eureka的核心架構圖如下:


上圖是來自Eureka官方的架構圖,大致描述了Eureka叢集的工作過程。圖描述的架構原理如下:
- Application Service 就相當於本書中的服務提供者(使用者微服務),Application Client就相當於本書中的服務消費者(電影微服務);
- Make Remote Call,可以簡單理解為呼叫RESTful的介面;
- us-east-1cus-east-1d等是zone,它們都屬於us-east-1這個region
由圖可知,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秒)。
Eureka Server之間將會通過複製的方式完成資料的同步。(詳見Eureka高可用章節)
Eureka還提供了客戶端快取的機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用快取中的資訊消費其他服務的API
綜上,Eureka通過心跳檢測、健康檢查、客戶端快取等機制,確保了系統的高可用性、靈活性和可伸縮性。

服務發現與服務註冊的實現

父pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.liuxun.cloud</groupId>
	<artifactId>microservice-spring-cloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<modules>
		<module>microservice-simple-provider-user</module>
		<module>microservice-simple-consumer-movie</module>
		<module>microservice-provider-user</module>
		<module>microservice-consumer-movie</module>
		<module>microservice-discovery-eureka</module>
	</modules>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.5.RELEASE</version>
	</parent>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

編寫Eureka Server

注意:對於euraka-server而言,在application.propertiesyml中需要配置
eureka.client.register-with-eureka= false
eureka.client.fetch-registry=false
作用在於只把當前程式當做eureka-server 而不充當eureka-client的角色
其次要配置Eureka註冊中心的地址:
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
然後需要在POM中新增spring-cloud-starter-eureka-server的依賴
如果需要為註冊中心配置登入認證還需要在application.properties中新增以下配置:
security.basic.enabled=true
security.user.name=liuxun
security.user.password=123456
eureka.client.service-url.defaultZone=http://liuxun:[email protected]:8761/eureka
同時還要再新增spring-boot-starter-security依賴
最後需要為主程式添加註解
在主程式上添加註解@EnableEurekaServer, 注意不存在@EnableDiscoveryServer具體程式碼如下:
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<artifactId>microservice-discovery-eureka</artifactId>
	<packaging>jar</packaging>

	<parent>
		<groupId>com.liuxun.cloud</groupId>
		<artifactId>microservice-spring-cloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
	</dependencies>
</project>
application.yml
security:
  basic:
    enabled: true
  user:
    name: liuxun
    password: 123456
server:
  port: 8761
  
eureka:
  client:
    healthcheck:
      enabled: true # 不是必須的
    register-with-eureka: false #防止將自身當做Eureka客戶端
    fetch-registry: false       #防止將自身當做Eureka客戶端
    service-url:
      defaultZone: http://liuxun:[email protected]:8761/eureka #如果對註冊中心登入授權,其使用者名稱和密碼要和上邊一致 
EurekaApplication.java
package com.liuxun.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class, args);
	}
}
啟動Eureka Server 訪問註冊中心如下:

編寫Eureka Client進行服務註冊

①首先需要新增spring-cloud-starter-eureka依賴,如下所示:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
②然後在配置檔案中配置註冊中心地址
eureka.client.service-url.defaultZone=http://liuxun:[email protected]:8761/eureka
③最後為主程式添加註解@EnableEurekaClient即可 (@EnableEurekaClient 只適用於Eureka 相當於對@EnableDiscoveryClient的增強, @EnableDiscoveryClient適用於所有)
啟動Eureka Server後再啟動Eureka Client, 開啟註冊中心地址,效果如下:

Actuator實現監管

Eureka Client新增actuator依賴用來監管執行環境的相關資訊
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
啟動後後臺日志會出現很多訪問相關環境資訊的url


訪問測試:

獲取Eureka Client的相關資訊

首先向控制器注入
org.springframework.cloud.client.discovery.DiscoveryClient
com.netflix.discovery.EurekaClient

程式碼示例如下:
@Autowired
private UserRepository userRepository;
@Autowired
private EurekaClient eurekaClient;    

@GetMapping("/eureka-instance")
public String serviceUrl() {
	InstanceInfo instance = this.eurekaClient.getNextServerFromEureka("MICROSERVICE-PROVIDER-USER", false);
	return instance.getHomePageUrl();
}
@GetMapping("/instance-info")
public ServiceInstance showInfo() {
	ServiceInstance localServiceInstance = this.discoveryClient.getLocalServiceInstance();
	return localServiceInstance;
}     

注意:呼叫的服務名稱其實是 服務提供者的註冊的主機名 應該和註冊中心顯示的一致,應該全部大寫
分別啟動Eureka ServerUser
訪問測試如下:


具體程式碼已上傳至GitHub 地址: https://github.com/liuxun1993728/microservice-spring-cloud1

相關推薦

SpringCloud實戰服務——服務發現服務註冊()-Eureka簡單使用

服務發現元件Eureka簡介服務發現元件可以使用ZK ,也可以使用Consul,之所以Eureka使用最多有如下的原因導致:① Eureka來自生產環境。② Spring  Cloud對Eureka的支援很好。Eureka簡介:Eureka是Netflix開發的服務發現元件,

SpringCLoud實戰服務——服務簡介以及入門使用

微服務概述微服務是什麼?微服務解決了什麼問題?微服務有什麼特點?單體架構是什麼?一個歸檔包包含了應用所有功能的應用程式,我們通常稱之為單體應用。架構單體應用的架構風格,我們稱之為單體架構,這是一種比較傳統的架構風格。單體架構存在的缺點:1.複雜性逐漸變高。2.技術債務逐漸上升

SpringCloud實戰服務——Ribbon詳解

自定義RibbonClient如何為服務消費者自定義Ribbon Client?① 程式碼自定義RibbonClient所謂的自定義Ribbon Client的主要作用就是使用自定義配置替代Ribbon預設的負載均衡策略,注意:自定義的Ribbon Client是有針對性的,一般一個自定義的Ribbon Cl

SpringCloud---(3)服務發現服務註冊

服務發現 關係調用說明: 服務提供者啟動時,向服務註冊中心註冊自己提供的服務。 服務消費者啟動時,在服務註冊中心訂閱自己所需要的服務。 註冊中心返回服務提供者的地址資訊給消費者。 消費者從提供者中呼叫服務。   服務發現元件的功能 1. 

(三)SpringCloud實戰服務

一、微服務架構概述 1.1 微服務特性以及優點 每個服務可以獨立執行在自己的程序裡 一系列獨立執行的微服務(goods,order,pay,user,search…)共同構建了整個系統 每個服務為獨立的業務開發,一個微服務只關注某個特定的功能,

使用SpringCloud實戰服務

一微服務架構概述 1.1 微服務特性以及優點 每個服務可以獨立執行在自己的程序裡 一系列獨立執行的微服務(goods,order,pay,user,search…)共同構建了整個系統 每個服務為獨立的業務開發,一個微服務只關注某個特定的功能,例如使用者

springcloud實戰篇四Eureka-client(服務提供者)叢集建立

下面搭建一個Eureka-client的服務提供者叢集1.三個工程的pom.xml依賴是一樣的,所以就僅貼出一個<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

乾貨實操:服務Spring Cloud 系列(Eureka服務發現服務註冊(strand alone)

此篇主要實操Eureka 服務端的服務註冊,以及服務發現,並需要認證才能訪問控制中心。 分五個部分說明: 一.  認識 Eureka  二.  Eureka  服務端開發 三.  Eureka 客戶端開發 四.  多客戶端情況檢視 五.  下節預告(多個服務提供後,怎麼

Netty入門客戶端服務端通信()

ktr 數據格式 lis boot ride owa 參數 val cef Netty入門之客戶端與服務端通信(二) 一.簡介   在上一篇博文中筆者寫了關於Netty入門級的Hello World程序。書接上回,本博文是關於客戶端與服務端的通信,感覺也沒什麽好說的了,直接

.NET Core服務基於Consul實現服務治理

請求轉發 1.0 asp.net AC port prefix 我們 tle nan 一、Consul基礎介紹   Consul是HashiCorp公司推出的開源工具,用於實現分布式系統的服務發現與配置。與其他分布式服務註冊與發現的方案,比如 Airbnb的Smart

.NET Core服務基於Consul實現服務治理(續)

shell pla code tst 分層 編輯 set req \n 上一篇發布之後,這一篇把上一篇沒有弄到的東西補一下,也算是給各位前來詢問的朋友的一些回復吧。一、Consul服務註冊之配置文件方式1.1 重溫Consul實驗集群  這裏我們有三個Consul Serv

服務架構的優勢不足(

頁面 中間 ima 直接 docke 連接 包含 後臺服務 駕駛 微處理架構——處理復雜事物   許多公司,比如Amazon、eBay和NetFlix,通過采用微處理結構模式解決了上述問題。其思路不是開發一個巨大的單體式的應用,而是將應用分解為小的、互相連接的微服務。   

Spring Cloud-02服務發現服務註冊Eureka + Eureka Server的搭建

文章目錄 服務發現元件概述 Eureka概述 Eureka原理 Maven父子工程的搭建 Eureka Server的搭建 新建 Maven Module 新增spring-cloud-starter-eureka-s

Kubernetes健康檢查服務依賴處理_Kubernetes中文社群

【編者的話】對線上業務來說,保證服務的正常穩定是重中之重,對故障服務的及時處理避免影響業務以及快速恢復一直是開發運維的難點。Kubernetes提供了健康檢查服務,對於檢測到故障服務會被及時自動下線,以及通過重啟服務的方式使服務自動恢復。而對於服務依賴,無論資源描述檔案是pod, rc或dep

android學習筆記客戶端服務端保持session登入狀態

剛進公司不久,也沒有具體專案任務,只有一個混合開發模式,使用AppCan開發的專案。 雖然混合開發很便捷、很高效,使用html和js就可以完成。 但我依然對android原生開發有著極高的熱情,尤其是在體驗了Android 5.0版本之後,更是對原生體驗著迷。 所以,我利用

Kubernetes健康檢查服務依賴處理

【編者的話】對線上業務來說,保證服務的正常穩定是重中之重,對故障服務的及時處理避免影響業務以及快速恢復一直是開發運維的難點。Kubernetes提供了健康檢查服務,對於檢測到故障服務會被及時自動下線,以及通過重啟服務的方式使服務自動恢復。而對於服務依賴,無論資源描述檔案是

Spring Cloud服務斷路由Hystrix服務閘道器學習筆記

上一篇文章介紹瞭如何使用Spring Cloud與Spring Boot以及Docker容器搭建一個微服務模式的示例(https://github.com/JackmanGo/SpringCloudLearn)。接下來需要學習斷路由與服務閘道器。 斷路由

學習搭建 Consul 服務發現服務網格-有豐富的示例和圖片

[TOC] ## 第一部分:Consul 基礎 ### 1,Consul 介紹 官網文件描述:Consul 是一個網路工具,提供功能齊全的服務網格和服務發現。 它可以做什麼:自動化網路配置,發現服務並啟用跨任何雲或執行時的安全連線。 那麼,我們對 Consul 的理解,就是服務網格、服務發現,官網文

SpringCloud 實戰:引入Feign元件,發起服務間呼叫

這是SpringCloud實戰系列中第二篇文章,瞭解前面第一篇文章更有助於更好理解本文內容: [①SpringCloud 實戰:引入Eureka元件,完善服務治理](https://www.cnblogs.com/admol/p/14030066.html) ## 簡介 Feign 是一個宣告式的 RE

ssh服務簡介及應用服務的進程的類型

加密 兩個 net 共享 案例 命名 權限 ike strong SSH ,由 IETF 的網絡小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SS