最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cloud  Eureka服務(wù)治理的實(shí)現(xiàn)

 更新時(shí)間:2018年06月11日 11:22:08   作者:薛定餓  
服務(wù)治理是微服務(wù)框架中最為核心和基礎(chǔ)的模塊,它主要是用來(lái)實(shí)現(xiàn)各個(gè)微服務(wù)實(shí)例的自動(dòng)化注冊(cè)與發(fā)現(xiàn)。這篇文章主要介紹了Spring Cloud Eureka服務(wù)治理的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下

什么是Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud 中的一個(gè)組件,它是基于 Netflix Eureka 做了二次封裝,主要是負(fù)責(zé)完成微服務(wù)框架中服務(wù)治理的功能。Spring Cloud通過(guò)為 Eureka 增加了 Spring Boot 風(fēng)格的自動(dòng)化配置,我們只需要通過(guò)簡(jiǎn)單的引用依賴(lài)和注解就能讓 Spring Boot 夠?qū)⒌奈⒎?wù)應(yīng)用輕松的與 Eureka 服務(wù)治理體系進(jìn)行整合。

服務(wù)治理

服務(wù)治理是微服務(wù)框架中最為核心和基礎(chǔ)的模塊,它主要是用來(lái)實(shí)現(xiàn)各個(gè)微服務(wù)實(shí)例的自動(dòng)化注冊(cè)與發(fā)現(xiàn)。

最初開(kāi)始,可能構(gòu)建的微服務(wù)系統(tǒng)服務(wù)并不是很多,我們可以通過(guò)一些靜態(tài)配置來(lái)完成服務(wù)的調(diào)用。比如有兩個(gè)服務(wù) A 和 B,其中 A 服務(wù)需要調(diào)用 B 服務(wù)來(lái)完成一個(gè)業(yè)務(wù)操作時(shí),為了實(shí)現(xiàn) B 服務(wù)的高可用,無(wú)論我們采用服務(wù)端的復(fù)雜均衡,還是客戶(hù)端的負(fù)載均衡,我們都需要手工的來(lái)維護(hù)一份 B 的實(shí)例列表。但是隨著業(yè)務(wù)的發(fā)展,系統(tǒng)功能越來(lái)越復(fù)雜,相應(yīng)的微服務(wù)也是越來(lái)越多,這種靜態(tài)手工維護(hù)的難度會(huì)越來(lái)越高。

為了解決這種問(wèn)題,產(chǎn)生了大量的服務(wù)治理的框架和產(chǎn)品。這些框架其實(shí)都是圍繞著服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)機(jī)制來(lái)完成對(duì)微服務(wù)應(yīng)用實(shí)例的自動(dòng)化管理。

服務(wù)注冊(cè)

在服務(wù)治理框架中,通常都會(huì)構(gòu)建一個(gè)服務(wù)注冊(cè)中心,每個(gè)服務(wù)實(shí)例單元向注冊(cè)中心登記自己的服務(wù),將實(shí)例主機(jī)位置、端口號(hào)、版本號(hào)、通信協(xié)議等一系列附加信息告訴注冊(cè)中心,注冊(cè)中心按服務(wù)名分類(lèi)組織服務(wù)清單。

服務(wù)發(fā)現(xiàn)

由于在服務(wù)治理框架下操作,服務(wù)間的通信與調(diào)用不再是通過(guò)指定具體的實(shí)例地址來(lái)實(shí)現(xiàn),而是通過(guò)向服務(wù)名發(fā)起請(qǐng)求調(diào)用實(shí)現(xiàn)。所以,服務(wù)調(diào)用方在調(diào)用服務(wù)提供方的接口時(shí),并不知道具體的服務(wù)實(shí)例位置。因此,需要先向注冊(cè)中心發(fā)起查詢(xún)請(qǐng)求,獲取實(shí)例清單,以實(shí)現(xiàn)對(duì)具體服務(wù)實(shí)例的訪問(wèn)。

搭建 Eureka 注冊(cè)中心服務(wù)

搭建單中心Eureka

  • Spring Cloud 版本:Finchley.BUILD-SNAPSHOT
  • Spring Boot 版本:2.0.2.RELEASE

我們之后的所有開(kāi)發(fā)都會(huì)基于以上版本進(jìn)行操作,需要注意的是:Sring Cloud 使用的是 SNAPSHOT 版,所以需要在 pom 文件中指定倉(cāng)庫(kù)的地址。

首先,我們新建一個(gè) Spring Boot 工程,命名為:spring-cloud-eureka,并在 pom 中添加必要的依賴(lài),具體 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>

  <groupId>com.sagesource</groupId>
  <artifactId>spring-cloud-eureka</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>spring-cloud-eureka</name>

  <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.BUILD-SNAPSHOT</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</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-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
</project>

通過(guò) @EnableEurekaServer 注解啟動(dòng)一個(gè)服務(wù)注冊(cè)中心提供給其他應(yīng)用進(jìn)行對(duì)話(huà)。這一步非常簡(jiǎn)單,只需在一個(gè)普通的 Spring Boot 應(yīng)用中添加這個(gè)注解就能開(kāi)啟此功能:

@SpringBootApplication
@EnableEurekaServer
public class ApplicationEurekaServer {

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

}

在默認(rèn)的配置下,注冊(cè)中心服務(wù)端也會(huì)將自己作為一個(gè)客戶(hù)端來(lái)注冊(cè)自身,一般情況下,我們需要禁用這個(gè)功能,修改后的 application.yml 如下:

# spring config
spring:
 application:
  name: spring-boot-eureka

# server config
server:
 port: 9871

# eureka config
eureka:
 instance:
  hostname: localhost
 client:
  register-with-eureka: false #不向注冊(cè)中心注冊(cè)自己
  fetch-registry: false #不檢索服務(wù)
  service-url:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

由于我們都是在本地運(yùn)行,為了后續(xù)的服務(wù)區(qū)分,我們將服務(wù)注冊(cè)中心的端口通過(guò) server.port 設(shè)置運(yùn)行端口為:9871
在完成上述配置后,啟動(dòng)應(yīng)用并訪問(wèn) http://localhost:9871??梢钥吹饺缦马?yè)面,其中 Instance currently registered with Eureka 的列表是空的,說(shuō)明還沒(méi)有服務(wù)注冊(cè)到該注冊(cè)中心。


我想大家都注意到上面那兩行醒目的紅字:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

原因:自我保護(hù)機(jī)制。Eureka Server在運(yùn)行期間,會(huì)統(tǒng)計(jì)心跳失敗的比例在15分鐘之內(nèi)是否低于85%,如果出現(xiàn)低于的情況(在單機(jī)調(diào)試的時(shí)候很容易滿(mǎn)足,實(shí)際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致),Eureka Server會(huì)將當(dāng)前的實(shí)例注冊(cè)信息保護(hù)起來(lái),同時(shí)提示這個(gè)警告。
由于在單機(jī)情況下很容易出現(xiàn)該問(wèn)題,按照網(wǎng)上的配置關(guān)閉掉自我保護(hù)后,Eureka 仍會(huì)報(bào)警,提示安全模式關(guān)閉,無(wú)法保證實(shí)例正確性。所以,我們暫時(shí)忽略該問(wèn)題,后期集群部署時(shí)即可解決。

注冊(cè)服務(wù)提供者

在完成了注冊(cè)中心服務(wù)的搭建后,接下來(lái)我們可以嘗試將一個(gè)既有的 Spring Boot 應(yīng)用加入到Eureka 的服務(wù)治理體系中去。
我們?nèi)匀灰灾暗?spring-cloud-server 為例,我們只需要修改 application.yml以下配置:

# 應(yīng)用名稱(chēng)
spring:
 application:
  name: spring-cloud-server

# eureka 注冊(cè)中心位置
eureka:
 client:
  service-url:
   defaultZone: http://localhost:9871/eureka/

修改完成后,即可啟動(dòng)服務(wù),這時(shí)我們?cè)谒⑿?eureka 的管理頁(yè)面,看到Instance currently registered with Eureka的列表信息如下:


這表明,我們的服務(wù)已經(jīng)成功注冊(cè)在注冊(cè)中心。

相關(guān)實(shí)例代碼:https://github.com/sagesource/spring-cloud-set

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud-feign使用詳解

    SpringCloud-feign使用詳解

    Feign是Spring?Cloud中的輕量級(jí)RESTful?HTTP服務(wù)客戶(hù)端,它通過(guò)定義接口和注解簡(jiǎn)化了服務(wù)調(diào)用,Feign支持Ribbon進(jìn)行負(fù)載均衡,并且可以通過(guò)OpenFeign與Spring?MVC注解結(jié)合使用,文章詳細(xì)介紹了Feign的使用方法、自定義配置以及與其他組件的集成
    2025-01-01
  • Java線程池復(fù)用線程的秘密你知道嗎

    Java線程池復(fù)用線程的秘密你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java線程池復(fù)用線程的秘密,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望您能夠多多關(guān)注

    2022-03-03
  • 一篇文章看懂Java異常處理

    一篇文章看懂Java異常處理

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,這篇文章主要給大家介紹了關(guān)于Java異常處理的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • spring結(jié)合hibernate示例詳解

    spring結(jié)合hibernate示例詳解

    這篇文章主要介紹了spring結(jié)合hibernate結(jié)合,需要的朋友可以參考下
    2017-09-09
  • springboot?aop配合反射統(tǒng)一簽名驗(yàn)證實(shí)踐

    springboot?aop配合反射統(tǒng)一簽名驗(yàn)證實(shí)踐

    這篇文章主要介紹了springboot?aop配合反射統(tǒng)一簽名驗(yàn)證實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java迭代器基礎(chǔ)知識(shí)點(diǎn)總結(jié)

    java迭代器基礎(chǔ)知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于java迭代器基礎(chǔ)知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • Java使用ArrayList實(shí)現(xiàn)撲克牌的示例代碼

    Java使用ArrayList實(shí)現(xiàn)撲克牌的示例代碼

    學(xué)習(xí)了關(guān)于集合類(lèi)的知識(shí),我們可以做一個(gè)小項(xiàng)目來(lái)加深對(duì)集合類(lèi)知識(shí)的學(xué)習(xí)!本文就來(lái)利用ArrayList實(shí)現(xiàn)撲克牌發(fā)牌洗牌效果,需要的可以參考一下
    2022-10-10
  • Java 知識(shí)難點(diǎn)之異常的認(rèn)知與使用詳解

    Java 知識(shí)難點(diǎn)之異常的認(rèn)知與使用詳解

    所謂異常是指程序在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤時(shí)提示調(diào)用者的機(jī)制,異常的種類(lèi)有很多,不同種類(lèi)的異常有不同的含義,也有不同的處理方式,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09
  • EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼

    EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼

    這篇文章主要介紹了EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-07-07
  • 關(guān)于springboot中的SPI機(jī)制

    關(guān)于springboot中的SPI機(jī)制

    這篇文章主要介紹了springboot中的SPI機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

锦州市| 抚顺县| 文昌市| 雷波县| 汉阴县| 浏阳市| 酉阳| 亚东县| 开远市| 滨州市| 柏乡县| 高青县| 土默特右旗| 阳原县| 同仁县| 南和县| 嘉定区| 泌阳县| 改则县| 阿拉善左旗| 大连市| 莆田市| 共和县| 汉沽区| 嘉义县| 清原| 西盟| 柳江县| 中宁县| 彭山县| 无锡市| 曲麻莱县| 连山| 和硕县| 金堂县| 突泉县| 旅游| 荣昌县| 仙居县| 泸水县| 尼木县|