1. 程式人生 > >springcloud系列—eureka—第1章-2:服務治理:eureka服務發現與消費

springcloud系列—eureka—第1章-2:服務治理:eureka服務發現與消費

本文大部分摘抄自書《springcloud微服務實戰》

服務發現與消費
  通過上面的內容介紹與實踐,我們已經搭建起微服務架構中的核心元件一服 務註冊中心(包括單節點模式和高可用模式)。同時,還對,上一章中實現的Spring Boot 入門程式做了改造。通過簡單的配置,使該程式註冊到Eureka註冊中心,上,成為該服務治理體系下的一個服務,  命名為hello-service。現在我們已經有了服務註冊中心和服務提供者,下面就來嘗試構建-一個服務消費者,它主要完成兩個目標,發現服務以及消費服務。其中,服務發現的任務由Eureka的客戶端完成,  而服務消費的任務由Ribbon完成。Ribbon是一個基於HTTP和TCP的客戶端負載均衡器,它可以在通過客戶端中配置的ribbonServerList服務端列表去輪詢訪問以達到均衡負載的作用。當Ribbon與Eureka聯合使用時,Ribbon的服務例項清單RibbonServerList會被DiscoveryEnabledNIWSServerList重寫,擴充套件成從Eureka註冊中心中獲取服務端列表。同時它也會用NIWSDi scoveryPing來取代IPing,  它將職責委託給Eureka 來確定服務端是否已經啟動。在本章中,我們對Ribbon不做詳細的介紹,讀者只需要理解它在Eureka服務發現的基礎上,實現了一套對服務例項的選擇策略,從而實現對服務的消費。下一章我們會對Ribbon做詳細的介紹和分析。

  下面我們通過構建一一個簡單的示例,看看在Eureka的服務治理體系下如何實現服務的發現與消費。

1-首先我們做個準備工作,啟動之前我們實現的服務註冊中心eureka-service以及provider-service服務。為了實驗Ribbon客戶端的負載均衡能力,我們通過java -jar命令列的形式啟動兩個provider-service服務提供者,不同埠。具體如下:

java -jar demo_eureka_client-0.0.1-SNAPSHOT --server.port=1113
java -jar demo_eureka_client-0.0.1-SNAPSHOT --server.port=1115

2-再啟動兩個provider-service服務提供者之後,可以再eureka-service的資訊面板中看到名為PROVIDER-SERVICE中有兩個例項單元。分別是通過命令列啟動的1113埠和1115埠。

3-建立一個SpringBoot的基礎工廠來實現服務消費者,取名為consume-service。並在pom檔案中引入依賴,比之前那

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!--Ribbon的依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>

4-建立應用主類,通過@EnableDiscoveryClient註解讓該應用註冊為Eureka客戶端,以獲得服務發現的能力。同時再主類中註冊RestTemplate的spring bean例項。並通過@LoanBalanced開啟Ribbon客戶端的負載均衡。

@SpringBootApplication
@EnableDiscoveryClient
public class DemoEurekaConsumeApplication {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoEurekaConsumeApplication.class, args);
    }
}

5-建立Controller類並實現/consume/service介面。在該介面中,通過在上面建立的RestTemplate 來實現對PROVIDER-SERVICE 服務提供的/hello介面進行呼叫。可以看到這裡訪問的地址是服務名PROVIDER-SERVICE,  而不是一個具體的地址,在服務治理框架中,這是一個非常重要的特性,也符合在本章一開始對服務治理的解釋。

@RestController
public class HellowController {
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consume/service",method = RequestMethod.GET)
    public String hello(){
        return restTemplate.getForEntity("http://PROVIDER-EUREKA/hello",String.class).getBody();
    }
}

注意:我們使用RestTemplate訪問服務提供者,我們是通過spring.application.name=provider-eureka去訪問服務提供者的,但是其實註冊中心會使用eureka.instance.hostname=provider,就是該工程(服務提供者)的eureka例項名稱去訪問。所以如果沒有再hosts檔案中配置域名的話,就會報錯UnknowHost...

6-在工廠的application.properties檔案中配置。如果不註冊到eureka註冊中心,是發現不了服務的。

server.port=1114
#應用名
spring.application.name=consume-ribbon
#例項名
eureka.instance.hostname=consume
#註冊中心
eureka.client.serviceUrl.defaultZone=http://eureka1:1111/eureka

7-啟動服務消費者,檢視eureka註冊中心資訊面板。

8-瀏覽器訪問http://localhost:1114/consume/service,看到成功返回了資料。

相關推薦

springcloud系列eureka1-2:服務治理eureka服務發現消費

本文大部分摘抄自書《springcloud微服務實戰》 服務發現與消費   通過上面的內容介紹與實踐,我們已經搭建起微服務架構中的核心元件一服 務註冊中心(包括單節點模式和高可用模式)。同時,還對,上一章中實現的Spring Boot 入門程式做了改造。通過簡單的配置,使該

springcloud系列—Config—6-2: Spring Cloud Config 服務端詳解、git(svn、本地倉庫)配置

資料參考:《Spring Cloud 微服務實戰》 目錄 服務端詳解 基本架構 git配置倉庫 佔位符配置url 配置多個倉庫 子目錄儲存 訪問許可權 svn配置倉庫 本地倉庫 本地檔案系統 服務端詳解 前面一篇《springcloud系列—Z

springcloud系列—Zuul—5-2: Spring Cloud Zuul 路由詳解

資料參考:《Spring Cloud 微服務實戰》 目錄 路由詳解 傳統路由配置 服務路由配置 服務路由的預設規則 自定義路由對映關係 路徑匹配 忽略表示式 路由字首 本地跳轉 cookie與頭資訊 重定向問題 路由詳解 傳統路由配置

springcloud系列—Feign—4-2: Feign 的繼承特性

資料參考:《Spring Cloud 微服務實戰》 目錄 建立公共介面 服務提供者中實現介面 服務消費者中繼承介面 上篇文章我們瞭解了Feign的基本使用,在HelloService類中宣告介面時,我們發現這裡的程式碼可以直接從服務提供者的Controller中複製過來,這些

springcloud系列—Feign—4-1: 宣告式服務呼叫 Feign

資料參考:《Spring Cloud 微服務實戰》 目錄 Spring Cloud Feign入門 第一步:建立普通Spring Boot工程 第二步:新增依賴 第三步:添加註解 第四步:宣告服務 第五步:Controller中呼叫服務 第六步:屬性配置 測試

springcloud系列教程|服務發現元件-eureka

服務發現-eureka 1:前言      上一篇:springcloud系列教程|第二篇:服務提供者和服務消費者講解了服務提供者和服務消費者的概念,以及使用了小栗子演示了兩個微服務之間的呼叫,那麼接下來將會介紹服務發現-eureka 以及它的使用。

springcloud系列—Stream—8-1: Spring Cloud Stream 訊息驅動

參考:http://blog.didispace.com/spring-cloud-starter-dalston-7-2/ 目錄 快速入門 Spring Cloud Stream是一個用來為微服務應用構建訊息驅動能力的框架。它可以基於Spring Boot來建立獨立的、可用於生產的

springcloud系列—Bus—7-1: Spring Cloud bus 訊息匯流排

參考:https://www.jianshu.com/p/730d86030a41 目錄 RabbitMQ實現訊息匯流排 spring boot 整合 RabbitMQ RabbitMQ實現訊息匯流排 原理分析 指定重新整理範圍 架構優化 kafka實現訊息匯流排

springcloud系列—Config—6-1: Spring Cloud Config 配置中心

資料參考:《Spring Cloud 微服務實戰》 目錄 分散式配置中心 快速入門 構建配置中心 配置規則詳解 客戶端配置對映 分散式配置中心 spring cloud config是spring cloud團隊建立的一個全新專案,用來為分散式系統中的基礎設施和微

springcloud系列—Zuul—5-1: Spring Cloud Zuul 入門

資料參考:《Spring Cloud 微服務實戰》 目錄 API閘道器服務:Spring Cloud Zuul 快速入門 構建閘道器 請求路由 傳統路由方式 面向服務的路由 請求過濾 API閘道器服務:Spring Cloud Zuul 通過前幾章的介紹,

springcloud系列—Hystrix—3-3: Hystrix 服務降級(fallback)異常處理,Hystrix依賴隔離(命令名稱-分組和執行緒池)、請求快取清除快取、斷路器

資料參考:《Spring Cloud 微服務實戰》 目錄 服務降級 在HystrixCommand中可以通過過載getFallback()方法來實現服務降級邏輯。 在 HystrixObservableCommand 實現得 Hystrix 命令中,我們可以通過過載 resumenW

Python演算法入門——1 2,氣泡排序

上一篇文章已經說過,桶排序會極大地浪費資源,因此需要用一種更簡單的排序方式來完成:氣泡排序。其原理是1.從第一個數字開始,與第二個數進行比較,如果小於第二個數(按從大到小排序),則將其交換數值;2.接著,第二個數與第三個數比較,重複此步驟,直至完成與最後一個數的比較。這樣,第一個數就到了它應該呆的地

《資料演算法Hadoop_Spark大資料處理技巧》艾提拉筆記.docx 1二次排序簡介 19 2二次排序詳細示例 42 3 Top 10 列表 54 4左外連線 96 5

《資料演算法:Hadoop_Spark大資料處理技巧》艾提拉筆記.docx       第1章二次排序:簡介 19 第2章二次排序:詳細示例 42 第3章 Top 10 列表 54 第4章左外連線 96 第5章反轉排序 127 第6章

springcloud系列—Config—6-4: Spring Cloud Config 客戶端詳解、動態重新整理配置

資料參考:《Spring Cloud 微服務實戰》 目錄 客戶端詳解 uri指定配置中心(Config First Bootstrap) 服務化配置中心(Discovery First Bootstrap) 失敗快速響應與重試 獲取遠端配置 動態重新整理配置 客戶

springcloud系列—Config—6-3: Spring Cloud Config 高可用配置、安全加密解密

資料參考:《Spring Cloud 微服務實戰》 目錄 安全保護 加密解密 使用前提 相關端點 配置金鑰 非對稱加密 高可用配置 安全保護 由於配置中心儲存的內容比較敏感,做一定的安全處理是必要的。為配置中心實現安全保護的方式有很多,比如物理網路限制,O

springcloud系列—Zuul—5-4: Spring Cloud Zuul 異常處理、禁用過濾器、動態載入

資料參考:《Spring Cloud 微服務實戰》 目錄 異常處理 try-catch處理 ErrorFilter處理 不足與優化 自定義異常資訊 禁用過濾器 動態載入          動態路由  

springcloud系列—Zuul—5-3: Spring Cloud Zuul過濾器詳解

資料參考:《Spring Cloud 微服務實戰》 目錄 過濾器 請求生命週期 核心過濾器 pre過濾器 route過濾器 post過濾器 過濾器     在Spring Cloud Zuul 中實現的過濾器必須包含4個基本特徵:過濾型別、

springcloud系列—Feign—4-3: Feign 的配置詳解

資料參考:《Spring Cloud 微服務實戰》 目錄 Ribbon配置 Hystrix配置 其他配置 Feign的檔案上傳實現 服務提供方(接收檔案) 服務消費方(傳送檔案) 到目前為止,小夥伴們對Feign的使用已經掌握的差不多了,我們在前文也提到Feign

springcloud系列—Hystrix—3-5: Hystrix 儀表盤Turbine叢集監控

資料參考:《Spring Cloud 微服務實戰》 目錄 Hystrix 儀表盤監控環境搭建 第一步:建立一個普通的Spring Boot工程 第二步:新增相關依賴 第三步:入口類上添加註解 第四步:屬性配置 執行效果 改造要監控的服務 引數詳解 Turbin

springcloud系列—Hystrix—3-4: Hystrix 請求合併

資料參考:《Spring Cloud 微服務實戰》 目錄 請求合併 服務提供者介面 服務消費者  合併請求和不合並的區別 通過註解實現請求合併   請求合併 在微服務架構中,我們將一個專案拆分成很多個獨立的模組,這些獨立的模組通過遠端呼叫來