• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringCloud學習筆記二:Spring Cloud Eureka 服務治理

    Spring Cloud Eureka的用處

    Spring Cloud Eureka是Spring Cloud Netflix的微服務架構中最核心的一部分,主要負責完成微服務架構中的服務治理功能,它用來實現各個微服務實例的自動化注冊和發現。

    本本通過以下幾個demo來分享如何通過Eureka進行服務治理

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

    一、搭建服務注冊中心

    項目結構圖

    pom文件

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.it</groupId>
        <artifactId>springcloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springcloud</name>
        <description>Demo project for Spring Cloud</description>
    
        <properties>
            <java.version>1.8</java.version>
        </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>

     

    ps:maven中dependencyManagement的意義

    1.在Maven中dependencyManagement的作用其實相當于一個對所依賴jar包進行版本管理的管理器。

    2.pom.xml文件中,jar的版本判斷的兩種途徑

    • 如果dependencies里的dependency自己沒有聲明version元素,那么maven就會倒dependencyManagement里面去找有沒有對該artifactId和groupId進行過版本聲明,如果有,就繼承它,如果沒有就會報錯,告訴你必須為dependency聲明一個version
    • 如果dependencies中的dependency聲明了version,那么無論dependencyManagement中有無對該jar的version聲明,都以dependency里的version為準。

    創建啟動類

    /**
     *
     * @EnableEurekaServer
     * 用來指定該項目為Eureka的服務注冊中心
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class Application {
        public  static  void main(String [] args){
            SpringApplication.run(Application.class, args);
        }
    }

    application.properties配置文件

    #設置tomcat服務端口號
    server.port=8081
    #設置服務名稱
    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

    訪問http://localhost:8081/,進入到Eureka的管理頁面

    二、注冊服務提供者

    重新創建一個工程

    項目結構圖

    pom文件

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>it.springcloud</groupId>
        <artifactId>eureka</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>eureka</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </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>

    啟動類

    /***
     *
     * @EnableDiscoveryClient
     * 讓服務使用eureka服務器
     * 實現服務注冊和發現
     *
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class EurekaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    
    }

     

    控制類

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @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";
        }
    }

    啟動后,控制臺會打印出這樣一段話

    DiscoveryClient_HELLO-SERVICE/SC-201901282139:hello-service:8100 - registration status: 204

     

    之前的注冊服務也會打印出

    Registered instance HELLO-SERVICE/SC-201901282139:hello-service:8100 with status UP (replication=false)

    回到頁面http://localhost:8081/,服務已經在注冊服務中成功注冊

     

    三、服務發現和消費

    重新創建項目

    項目結構圖

     

    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>

     

    啟動類

    @EnableDiscoveryClient
    @SpringBootApplication
    public class RibbonApplication {
    
        //@Bean 應用在方法上,用來將方法返回值設為為bean
        @Bean
        @LoadBalanced  //@LoadBalanced實現負載均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(RibbonApplication.class, args);
        }
    
    }

    控制類

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    @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 !!!";
        }
    }

    application.properties配置文件

    server.port=9999
    
    spring.application.name=hello-consumer
    eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka

    測試方法,啟動兩個hello-server服務,一個hello-consumer服務,注意同時啟動的服務端口不能相同。

    重新訪問eureka頁面,發現已經注冊了兩個server服務,一個consumer服務

    多次訪問http://localhost:9999/hello-consumer,會發現hello-service1和hello-service2會輪流被調用(已經實現了負責均衡),可以通過兩者的控制臺打印內容確認

     

    總結

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

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

    參考資料

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

    《Maven中的dependencyManagement 意義》

     

    版權聲明:本文為qixinbruce原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qixinbruce/article/details/87908788

    智能推薦

    Spring cloud Eureka 服務治理(1)

    Spring cloud eureka是用來實現服務的注冊和發現;既包含了服務端組件也包含了客戶端組件。 Eureka的服務端也成為服務注冊中心,支持高可用配置,Eureka客戶端主要處理服務的注冊與發現,Eureka的客戶端向注冊中心注冊自身提供的服務并周期性的發送心跳來更新它的服務,也能從服務端查詢當前注冊的服務信息并把它們緩存到本地并周期性地刷新服務狀態。 本篇文章主要分為以下幾個方面: 1...

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

    服務治理 Eureka 注冊發現中心         這邊的話先搭建一個spring boot項目,直接使用spring的腳手架搭建就好          spring腳手架      我用的是spring b...

    Spring Cloud系列之Eureka服務治理

    寫在前面 Spring Cloud Eureka是基于Netflix Eureka做的二次封裝.主要包含兩部分: 服務注冊中心 eureka server 服務提供者 eureka client ps:Netflix提供的模式包括服務發現(eureka),斷路器(hystrix),智能路由(zuul)和客戶端負載平衡(ribbon) 服務注冊中心 創建服務注冊中心 1.新建項目,這里我使用的是ID...

    spring cloud eureka 的服務治理機制

    一、基礎架構   構建Eureka服務治理有三個核心角色:服務注冊中心、服務提供者和服務消費者。 服務注冊中心(Eureka Server):Eureka提供的服務端,提供服務注冊和發現的功能; 服務提供者:提供服務的應用,遵循Eureka通信機制的應用。它將自己注冊到Eureka Server中,以供其他應用發現; 服務消費者:消費者應用從服務注冊中心獲取...

    SpringCloud學習之Spring Cloud Eureka來實現服務治理。

    最近的微服務太火了,自學一下, 原本學的有springboot, 但是自學springboot是遠遠不夠的, 今天就來學習下springcloud。 Spring Cloud簡介 Spring Cloud是一個基于Spring Boot實現的云應用開發工具,它為基于JVM的云應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等操作提供...

    猜你喜歡

    Spring Cloud 學習1. 服務治理Spring Cloud Eureka

    本系列學習內容來自《Spring Cloud微服務實戰》 Srping Cloud Eureka是Spring Cloud netflix微服務套件中的一部分,它基于Netflix Eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能。 服務治理 服務注冊 在服務治理框架中,通常都會構建一個注冊中心,每個服務單元向注冊中心登記自己提供的服務,將主機與端口號、版本號、通信協議等一些附加信...

    Spring cloud學習筆記一服務治理Eureka

    服務治理Eureka 服務治理-概念&技術選型 技術選型 Eureka-服務治理全鏈路 服務注冊 心跳檢測 服務剔除 服務續約 服務自保 服務下線 注冊中心高可用改造(雙備份注冊中心) 服務治理-概念&技術選型 服務治理 技術選型 分布式系統CAP定理:(C)一致性,(A)可用性,§分區容錯性,分布式系統中只能三元二,不能全占,一般CP,AP。 Eureka Consul...

    Spring Cloud初探——服務治理Spring Cloud Eureka

    1.Spring Cloud介紹   Spring Cloud 是一個基于Spring Boot實現的微服務架構開發工具,它同Spring Boot 一樣,同樣為微服務架構中涉及的配置管理,服務治理,斷路器,智能路由,微代理,控制總線,全局鎖,決策競選,分布式會話和集群狀態管理等操作提供了一種簡單的開發方式。 2 .服務治理組件 Spring Cloud Eureka &ems...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡