1. 程式人生 > >spring cloud 入門系列二:使用Eureka 進行服務治理

spring cloud 入門系列二:使用Eureka 進行服務治理

服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務例項的自動化註冊和發現。

Spring Cloud Eureka是Spring Cloud Netflix 微服務套件的一部分,主要負責完成微服務架構中的服務治理功能。

本文通過簡單的小例子來分享下如何通過Eureka進行服務治理:

  • 搭建服務註冊中心
  • 註冊服務提供者
  • 服務發現和消費

==========我是華麗的分割線========================

一、搭建服務註冊中心

先列出完整目錄結構:

  

  搭建過程如下:

  1. 建立maven工程:eureka(具體實現略)
  2. 修改pom檔案,引入依賴
    <
    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.sam</groupId> <artifactId
    >eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent
    > <properties> <javaVersion>1.8</javaVersion> </properties> <!-- 使用dependencyManagement進行版本管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR6</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 引入eureka server依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project>
  3. 建立啟動類
    /**
     * 
     * @EnableEurekaServer
     * 用來指定該專案為Eureka的服務註冊中心
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApp {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApp.class, args);
        }
    }
  4. 配置application.properties檔案
    #設定tomcat服務埠號
    server.port=1111
    #設定服務名稱
    spring.application.name=eureka-service
    
    eureka.instance.hostname=localhost
    #註冊中心不需要註冊自己
    eureka.client.register-with-eureka=false
    #註冊中心不需要去發現服務
    eureka.client.fetch-registry=false
    #設定服務註冊中心的URL
    eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
  5. 啟動服務並訪問,我們會看到這樣的畫面:

二、註冊服務提供者

  先列出完整目錄結構:

  

  搭建過程如下:

  1. 建立maven工程:hello-service(具體實現略)
  2. 修改pom檔案,引入依賴
    <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.sam</groupId>
        <artifactId>hello-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入eureka 客戶端依賴 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
        </dependencies>
    </project>
  3. 建立啟動類
    /***
     * 
     * @EnableDiscoveryClient
     * 讓服務使用eureka伺服器
     * 實現服務註冊和發現
     *
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class HelloApp {
    
        public static void main(String[] args) {
    
            SpringApplication.run(HelloApp.class, args);
        }
    
    }
  4. 建立controller
    @RestController
    public class HelloController {
    
        Logger logger = LoggerFactory.getLogger(HelloController.class);
    
        @Autowired
        DiscoveryClient discoveryClient;
        
        @RequestMapping("/hello")
        public String hello() {
            ServiceInstance instance = discoveryClient.getLocalServiceInstance();
            //列印服務的服務id
            logger.info("*********" + instance.getServiceId());
            return "hello,this is hello-service";
        }
    }
  5. 配置application.properties檔案
    server.port=9090
    #設定服務名
    spring.application.name=hello-service
    #設定服務註冊中心的URL,本服務要向該服務註冊中心註冊自己
    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka
  6. 啟動並測試
    1. )啟動後再hello-service的控制檯會有這種字樣(xxx代表你的PC名)
      Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

      eureka的控制檯會打印出如下字樣(xxx代表你的PC名)

      Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)
    2. )再次訪問localhost:1111,會發現有服務註冊到註冊中心了

三、服務發現和消費

  完整目錄結構如下:

  

  搭建過程:

  1. 建立maven工程(具體實現略)
  2. 修改pom檔案,引入依賴
    <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.sam</groupId>
        <artifactId>hello-consumer</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入eureka 客戶端依賴 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <!-- 引入ribbon 依賴 ,用來實現負載均衡,我們這裡只是使用,先不作其他介紹-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>
    
        </dependencies>
    </project>

    這裡比hello-service服務提供者,多了ribbon的依賴
  3. 建立啟動類
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ConsumerApp {
    
    
        //@Bean 應用在方法上,用來將方法返回值設為為bean
        @Bean
        @LoadBalanced  //@LoadBalanced實現負載均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
        
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApp.class, args);
        }
    }

    這裡也要用到@EnableDiscoveryClient, 讓服務使用eureka伺服器, 實現服務註冊和發現
  4. 建立controller
    @RestController
    public class ConsumerController {
    
        //這裡注入的restTemplate就是在com.sam.ConsumerApp中通過@Bean配置的例項
        @Autowired
        RestTemplate restTemplate;
    
        @RequestMapping("/hello-consumer")
        public String helloConsumer() {
            //呼叫hello-service服務,注意這裡用的是服務名,而不是具體的ip+port
            restTemplate.getForObject("http://hello-service/hello", String.class);
            return "hello consumer finish !!!";
        }
    }
  5. 配置application.properties檔案
    server.port=9999
    
    spring.application.name=hello-consumer
    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka
    
    
    #這裡的配置專案和服務提供者hello-service一樣
  6. 啟動,測試
    1. )啟動eureka。為了展示負責均衡的效果,我們的hello-service啟動兩個服務,啟動兩個服務的具體步驟如下
      1. 以上是hello-service1的啟動步驟,埠號為9090;同樣方法設定hello-service2,埠號為9091(具體實現略)。

    2. )啟動hello-consumer
    3. )再次訪問http://localhost:1111/,會發現有2個hello-service服務(埠號一個是9090,一個是9091),1個hello-consume服務
    4. )   多次訪問http://localhost:9999/hello-consumer,會發現hello-service1和hello-service2會輪流被呼叫(已經實現了負責均衡),可以通過兩者的控制檯列印內容確認(還記得我們在hello-service的controller中有個loggerlogger.info("*********" + instance.getServiceId());嗎?對,就是這個列印)

四、總結

以上例項實現了基本的服務治理:

  • 通過spring-cloud-starter-eureka-server和@EnableEurekaServer實現服務註冊中心
  • 通過spring-cloud-starter-eureka和@EnableDiscoveryClient使用並註冊到服務註冊中心
  • 通過spring-cloud-starter-eureka和@EnableDiscoveryClient使用註冊中心並發現服務,通過spring-cloud-starter-ribbon來實現負載均衡消費服務

PS:這裡說明下,我用的IDE是Spring Tool Suite,是spring定製版的eclipse,方便我們使用spring進行開發,有興趣的朋友可以自行百度瞭解下。

相關推薦

spring cloud 入門系列使用Eureka 進行服務治理

服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務例項的自動化註冊和發現。 Spring Cloud Eureka是Spring Cloud Netflix 微服務套件的一部分,主要負責完成微服務架構中的服務治理功能。 本文通過簡單的小例子來分享下如何通過Eureka進行服務治理:

spring cloud 入門系列使用Hystrix 實現斷路器進行服務容錯保護

關系 調用 說明 schema 技術 能力 BE 最終 響應 在微服務中,我們將系統拆分為很多個服務單元,各單元之間通過服務註冊和訂閱消費的方式進行相互依賴。但是如果有一些服務出現問題了會怎麽樣? 比如說有三個服務(ABC),A調用B,B調用C。由於網絡延遲或C本身代碼有

spring cloud 入門系列使用Eureka 搭建高可用服務註冊中心

在上一篇中分享了如何使用Eureka 進行服務治理,裡面搭建的服務註冊中心是單體的, 但是在實際的應用中,分散式系統為了防止單體服務宕機帶來嚴重後果,一般都會採用伺服器叢集的形式,服務註冊中心也是一樣,需要多臺服務一起工作,組成高可用的服務註冊中心。這樣,如果有其中一臺宕機,系統也能正常執行。 那麼如何來

spring cloud 入門系列使用spring cloud sleuth整合zipkin進行服務鏈路追蹤

好久沒有寫部落格了,主要是最近有些忙,今天忙裡偷閒來一篇。 =======我是華麗的分割線========== 微服務架構是一種分散式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,因此需要有個東西去跟蹤

spring cloud 入門系列基於Git存儲的分布式配置中心--Spring Cloud Config

入門 代碼結構 dev eas TP scope ict AI 新項目 我們前面接觸到的spring cloud組件都是基於Netflix的組件進行實現的,這次我們來看下spring cloud 團隊自己創建的一個全新項目:Spring Cloud Config.它用來為分

Spring Cloud 入門教程() 配置管理

使用Config Server,您可以在所有環境中管理應用程式的外部屬性。客戶端和伺服器上的概念對映與Spring Environment和PropertySource抽象相同,因此它們與Spring應用程式非常契合,但可以與任何以任何語言執行的應用程式一起使用

spring cloud 入門系列使用Zuul 實現API閘道器服務

通過前面幾次的分享,我們瞭解了微服務架構的幾個核心設施,通過這些元件我們可以搭建簡單的微服務架構系統。比如通過Spring Cloud Eureka搭建高可用的服務註冊中心並實現服務的註冊和發現; 通過Spring Cloud Ribbon或Feign進行負載均衡;通過Spring Cloud Hyst

spring cloud 入門系列基於Git儲存的分散式配置中心--Spring Cloud Config

我們前面接觸到的spring cloud元件都是基於Netflix的元件進行實現的,這次我們來看下spring cloud 團隊自己建立的一個全新專案:Spring Cloud Config.它用來為分散式系統中的基礎設施和微服務提供集中化的外部配置支援,分為服務端和客戶端兩個部分。 其中服務端也稱為分散式

spring cloud 入門系列初識spring cloud

最近看到微服務很火,也是未來的趨勢, 所以就去學習下,在dubbo和spring cloud之間我選擇了從spring cloud,主要有如下幾種原因: dubbo主要專注於微服務中的一個環節--服務治理,像服務註冊和發現這種還需要zookeeper第三方的中間;但是spring cloud提供了微服

spring cloud 入門系列使用Feign 實現宣告式服務呼叫

一、Spring Cloud Feign概念引入通過前面的隨筆,我們瞭解如何通過Spring Cloud ribbon進行負責均衡,如何通過Spring Cloud Hystrix進行服務斷路保護,兩者作為基礎工具類框架應用在各種基礎設施類微服務和業務類微服務中,並且成對存在,那麼有沒有更高層的封裝,將兩者的

spring cloud 入門)【 客戶端往註冊中心Eureka 註冊服務

客戶端 往Eureka 註冊服務,註冊成功之後,其他的服務,才可以對本服務進行呼叫 程式碼結構如下:   UserApplication 程式碼如下: package com.study.user; import org.springframework.boot.

spring cloud 入門系列總結

從我第一次接觸Spring Cloud到現在已經有3個多月了,當時是在部落格園裡面註冊了賬號,並且看到很多文章都在談論微服務,因此我就去了解了下,最終決定開始學習Spring Cloud。我在一款閱讀App上買了一本 程式猿DD的《Spring Cloud 微服務實戰》,開始了我的Spring Cloud學習

Spring Cloud 入門教程(一)服務治理(Eureka)

Spring Cloud是一系列框架的集合,其基於Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,構建了服務治理(發現註冊)、配置中心、訊息匯流排、負載均衡、斷路器、資料監控、分散式會話和叢集狀態管理等功能,為我們提供一整套企業級分散式雲

Spring Cloud 入門教程(三) 配置自動刷新

入門 stc pro 解決方案 con log clas ring color 之前講的配置管理, 只有在應用啟動時會讀取到GIT的內容, 之後只要應用不重啟,GIT中文件的修改,應用無法感知, 即使重啟Config Server也不行。 比如上一單元(Spring Clo

Spring Cloud 入門教程(四) 分布式環境下自動發現配置服務

.html article png discover ice conf label tail 註釋 前一章, 我們的Hello world應用服務,通過配置服務器Config Server獲取到了我們配置的hello信息“hello world”. 但自己的配置文件中必須配

Spring Cloud 入門教程(五) Ribbon實現客戶端的負載均衡

接上節,假如我們的Hello world服務的訪問量劇增,用一個服務已經無法承載, 我們可以把Hello World服務做成一個叢集。  很簡單,我們只需要複製Hello world服務,同時將原來的埠8762修改為8763。然後啟動這兩個Spring Boot應用, 就可

Spring Cloud 入門教程(六) 用宣告式REST客戶端Feign呼叫遠端HTTP服務

首先簡單解釋一下什麼是宣告式實現? 要做一件事, 需要知道三個要素,where, what, how。即在哪裡( where)用什麼辦法(how)做什麼(what)。什麼時候做(when)我們納入how的範疇。 1)程式設計式實現: 每一個要素(where,wh

Spring Cloud之Zuul()管理Zuul端點

主題 管理Zuul端點 前言 當@EnableZuulProxy與Spring Boot Actuator配合使用,Zuul會暴露:routes和filters端點。藉助這些端點,可方便、直觀地檢視及管理Zuul。 內容 ★routes端點★ 1.routes端點簡介

Spring Cloud之Gateway()閘道器過濾器

版本:2.0.2.RELEASE 連結:http://spring.io/projects/spring-cloud-gateway#overview   本章主要目錄如下: Spring Cloud Gateway閘道器過濾器工廠是什麼?   本章主

Spring Cloud 實戰()- Eureka 高可用註冊中心

Eureka 高可用註冊中心 點餐系統中的產品服務、訂單服務已寫了大半,但是註冊中心高可用一直還沒解決,今兒就把我遇到的坑塵現出來,避免以後再遇到此問題無章可循了。 Eureka Server1 配置