• <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學習-(2)服務的注冊與發現(Eureka)

    前面SpringBoot已經介紹了SpringBoot相關使用,如果對SpringBoot不了解可以先看一下。

    1.SpringCloud介紹
    SpringCloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等,運行環境簡單。SpringCloud是基于SpringBoot的。

    2.創建服務注冊中心
    在這里,我們需要用的的組件上Spring Cloud Netflix的Eureka ,eureka是一個服務注冊和發現模塊【這里使用的是IDEA工具創建,Eclipse具體可以直接創建Maven,然后引入相應的jar包即可】

    2.1 首先創建一個maven主工程。
    File->New->Project->Spring Initializr->Next
    這里寫圖片描述

    填寫GroupId:com.tangjinyi
    填寫ArtifactId:springcloud-eureka-server

    這里寫圖片描述

    繼續,選擇->Cloud Discovery->Eureka Server。

    項目創建完成后的目錄結構如下:
    這里寫圖片描述

    由于IDEA版本的問題,所以使用的SpringBoot版本也都不一樣,我這里工具默認使用的是SpringBoot2.0.1.RELEASE版本,在引入jar包上與1.x版本有一定的區別,詳見在配置文件里面的說明:

    <?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.tangjinyi</groupId>
        <artifactId>springcloud-eureka-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springcloud-eureka-server</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.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.M9</spring-cloud.version>
        </properties>
    
        <dependencies>
            <!--springboot1.x使用的是該jar包,2.x在artifactId中加入了netflix,所以在使用的時候要看清楚版本號
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
            -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
            <!--對eureka控制臺設置訪問權限-->
            <!--<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>-->
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</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>
    
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    
    
    </project>
    

    2.2配置文件application.properties和application.yml
    springcloud提供了兩種配置文件可供選擇,分別是.properties和.yml。名稱都是固定的不要隨便修改。
    網上很多資料都是使用.yml配置文件,本人習慣使用.properties配置文件。并沒有太多的差異,可根據個人喜好選擇。
    如果使用maven構建的工程,該配置文件應放置在resources目錄下。

    #設置eureka服務的端口號
    server.port=8761
    #設置eureka服務訪問的host
    eureka.instance.hostname=localhost
    #默認情況下erureka server也是一個eureka client ,必須要指定一個 server。通過eureka.client.registerWithEureka:false和fetchRegistry:false來表明自己是一個eureka server.
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    
    
    #對eureka控制臺設置訪問權限
    #spring.security.user.name=root
    #spring.security.user.password=123456
    #eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/
    
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

    2.3啟動類

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class SpringcloudEurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudEurekaServerApplication.class, args);
        }
    }

    前面 SpringCloud學習-(1)掃盲 介紹了@SpringBootApplication注解。
    @SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiguration@ComponentScan默認掃描與SpringcloudEurekaServerApplication 類同級和下級的目錄,所以SpringcloudEurekaServerApplication的位置一定要注意。@EnableEurekaServer注解表示啟動一個eureka服務注冊中心。

    2.4啟動eureka服務注冊中心
    直接右鍵run as SpringcloudEurekaServerApplication 類即可啟動eureka服務。

    2018-05-21 14:27:41.649  INFO 6152 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5c6648b0: startup date [Mon May 21 14:27:41 CST 2018]; root of context hierarchy
    2018-05-21 14:27:41.836  INFO 6152 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
    2018-05-21 14:27:41.871  INFO 6152 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$d4245eb4] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.0.1.RELEASE)
    

    2.5訪問eureka后臺界面
    eureka服務啟動完畢后,打開瀏覽器訪問http://localhost:8761,打開eureka服務注冊中心管控臺如下:

    這里寫圖片描述

    No application available 沒有服務被發現 ……
    因為沒有注冊服務當然不可能有服務被發現了。

    3.創建服務提供者

    3.1按照創構eureak server的方式再創建一個client工程
    GroupId:com.tangjinyi
    ArtifactId:springcloud-eureka-client1
    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.tangjinyi</groupId>
        <artifactId>springcloud-eureka-client1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springcloud-eureka-client1</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.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.M9</spring-cloud.version>
        </properties>
    
        <dependencies>
            <!--<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
    
            <!--<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>-->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</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>
    
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    
    
    </project>
    

    3.2修改配置文件application.properties

    #eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/
    #eureka注冊中心的訪問地址
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    #服務提供者提供的服務端口
    server.port=8762
    #服務提供者的提供的服務名為service-sayHello
    spring.application.name=service-sayHello

    3.3修改啟動類

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.beans.factory.annotation.Value;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class SpringcloudEurekaClient1Application {
    
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudEurekaClient1Application.class, args);
        }
    
        @Value("${server.port}")
        private String port;
    
        @RequestMapping(value = "/sayHello")
        public String sayHello(@RequestParam String name){
            return "hello "+name+",port:"+port;
        }
    }

    @RestController注解在springboot系列中已經介紹過了,添加該注解表示提供Rest服務。
    @EnableDiscoveryClient注解就是將服務注冊到eureka注冊中心上。還有一個注解@EnableEurekaClient也可以使用,其效果同@EnableDiscoveryClient,但是@EnableEurekaClient注解只能適用于eureka注冊中心,而@EnableDiscoveryClient則是一個通用注解。所以這里我們選擇通用的注解使用。

    3.4啟動服務提供者
    仍然是右鍵run as SpringcloudEurekaClient1Application。

    3.5注冊服務查看

    服務提供者啟動完畢后,查看eureka注冊中心

    這里寫圖片描述
    服務提供者service-sayHello已經注冊到eureka注冊中心上。

    3.6測試service-sayHello服務

    由前面的配置可以知道服務的端口是8762,服務的訪問路徑為sayHello,服務傳遞的參數為name
    打開瀏覽器,訪問http://localhost:8762/sayHello?name=eurekaclient
    這里寫圖片描述

    到此,一個簡單的eureka服務注冊和發現小例子就完成了。

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

    智能推薦

    SpringCloud學習之路-Eureka(服務注冊與發現)

    1.使用IDEA搭建Maven主工程 首先創建一個主Maven工程,在其pom文件引入依賴,spring Boot版本為2.0.3.RELEASE,Spring Cloud版本為Finchley.RELEASE。這個pom文件作為父pom文件,起到依賴版本控制的作用,其他module工程繼承該pom。 注意:父pom的打包方式為pom,modules里是子項目名   2.創建服務注冊中心...

    springcloud學習筆記一:eureka服務注冊與發現

    springcloud可以方便的幫我們完成微服務架構,它擁有多個子項目,可以去官網簡單看下介紹。 其中component下的代表著現有的子項目,本次所記錄的eureka就是其中spring-cloud-netflix里的一個模塊。 eureka在我們微服務架構中實現的就是服務發現與注冊的功能,我們可以稱之為注冊中心,即我們開發的服務注冊到該注冊中心,同時服務消費端來注冊中心訂閱服務。 我們可以直接...

    Springcloud學習之路------------Eureka服務注冊與發現

    建立eureka服務端 一、建model 如:cloud-eureka-server7001 二、改pom 添加依賴eureka-server 表示這是一個eureka服務端 三、改配置 集群板eureka: 就是把defaultZone 指向其他eureka的hostname ,如果有多個則用逗號隔開。 單機版eureka: 就是指向自己的hostname 四、主啟動 在主啟動上加入@Enabl...

    SpringCloud學習筆記【二】:Eureka服務注冊與發現

    文章目錄 本篇要點 Eureka基礎知識 什么是服務治理 什么是服務注冊與發現 Eureka的兩個組件 單機版Eureka構建步驟 創建服務中心模塊 引入依賴 配置yml 在啟動類上表明@EnableEurekaServer 進行測試 注冊客戶端 引入依賴 配置yml 在啟動類上表明@EnableEurekaClient 繼續測試 開啟保護機制 Eureka執行步驟理解 集群原理說明 集群版Eur...

    springcloud(三)--服務注冊與發現Eureka

    如題,本篇我們來引入SpringCloud中服務注冊與發現組件--Eureka,然后將SIM服務提供者向Eureka服務器進行注冊。  一、Eureka 是什么 Eureka是Netflix開發的服務發現框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-c...

    猜你喜歡

    SpringCloud(一) eureka服務注冊與發現

    一、 Eureka介紹 Eureka是一個基于REST(Representational State Transfer)的服務,主要用于AWS cloud, 提供服務定位(locating services)、負載均衡(load balancing)、故障轉移(failover of middle-tier servers)。我們把它叫做Eureka Server. Eureka也提供了基于Jav...

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

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

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

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

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

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