成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Cloud實戰(zhàn)(二)-Spring Cloud Eureka

jaysun / 2449人閱讀

摘要:概要什么是使用獲取服務調用整合構建集群什么是模塊提供的功能是被動式的服務發(fā)現(xiàn)什么是服務發(fā)現(xiàn)服務發(fā)現(xiàn)就像聊天室一個每個用戶來的時候去服務器上注冊這樣他的好友們就能看到你你同時也將獲取好友的上線列表在微服務中服務就相當于聊天室的用戶而服務注冊中

概要

什么是Spring Cloud Eureka?

使用Eureka獲取服務調用

Eureka整合Spring Config Server

構建Eureka Server集群

什么是Spring Cloud Eureka?

Spring Cloud Eureka 模塊提供的功能是被動式的服務發(fā)現(xiàn).
什么是服務發(fā)現(xiàn)?
服務發(fā)現(xiàn)就像聊天室一個,每個用戶來的時候去服務器上注冊,這樣他的好友們就能看到你,你同時也將獲取好友的上線列表.
在微服務中,服務就相當于聊天室的用戶,而服務注冊中心就像聊天室服務器一樣,目前服務發(fā)現(xiàn)的解決方案有Eureka,Consul,Etcd,Zookeeper,SmartStack,等等.

本文就來講講Eureka,如圖所示,Eureka Client通過HTTP(或者TCP,UDP)去Eureka Server注冊和獲取服務列表,為了高可用一般會有多個Eureka Server組成集群.Eureka會移除那些心跳檢查未到達的服務.

使用Eureka獲取服務調用

這節(jié)我們將構建一個Eureka Server,5個Eureka Client(分別提供主語,動詞,量詞,形容詞,名詞服務),再構建一個Sentence Eureka Client 來用前面五個服務造句.

1.創(chuàng)建mmb-eureka-server

添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka-server(pom.xml)

 
        org.springframework.cloud
        spring-cloud-starter-parent
        Brixton.SR4
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        
    

配置應用信息-端口和應用名稱 application.yml

server:
  port: 8010

spring:
  application:
    name: mmb-eureka-server

啟動服務

@SpringBootApplication
@EnableEurekaServer
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

打開管理頁面,檢查是否成功


2.創(chuàng)建mmb-eureka-client

添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka (pom.xml)

  
        org.springframework.cloud
        spring-cloud-starter-parent
        Brixton.SR4
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
    

配置應用信息-eureka server信息,實際使用的words信息,端口號 (application.yml)

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8010/eureka/

words: 你,我,他

server:
  port: ${PORT:${SERVER_PORT:0}}
#  這個的意思是隨機指定個沒使用的端口

配置啟動信息-應用名稱 (bootstrap.xml)

spring:
  application:
    name: mmb-eureka-client-subject

添加Controller-隨機獲取words中的一條

@RestController
public class Controller {

   @Value("${words}") String words;

    @RequestMapping("/")
    public  String getWord() {
        String[] wordArray = words.split(",");
        int i = (int)Math.round(Math.random() * (wordArray.length - 1));
        return wordArray[i];
    }
}

啟動服務

@SpringBootApplication
@EnableEurekaClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

訪問127.0.0.1/port(看日志可以得到各個應用的port) 看到words里的詞就啟動成功了,

其它的verb,acticle,adjective,noun工程類似,就把words,和spring.application.name改成對應的工程名字就好了

3.創(chuàng)建sentence工程

添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka,spring-boot-starter-web,spring-boot-starter-actuator (pom.xml)

  
        org.springframework.cloud
        spring-cloud-starter-parent
        Brixton.SR4
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-actuator
        
    

配置應用信息-eureka server和端口號 (application.yml)

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8010/eureka/

server:
  port: 8020

配置啟動信息-應用名稱 (bootstrap.yml)

spring:
  application:
    name: mmb-eureka-sentence

添加Controller-用其他eureka-clients(subject,verb,acticle,adjective,noun)的各個服務造句

@RestController
public class Controller {

    @Autowired
    DiscoveryClient client;

    @RequestMapping("/sentence")
    public  String getSentence() {
        return
                getWord("mmb-eureka-client-subject") + " "
                        + getWord("MMB-EUREKA-CLIENT-VERB") + " "
                        + getWord("mmb-eureka-client-article") + " "
                        + getWord("mmb-eureka-client-adjective") + " "
                        + getWord("mmb-eureka-client-noun") + "."
                ;//大小寫不區(qū)分
    }

    public String getWord(String service) {
        List list = client.getInstances(service);
        if (list != null && list.size() > 0 ) {
            URI uri = list.get(0).getUri();
            if (uri !=null ) {
                return (new RestTemplate()).getForObject(uri,String.class);
            }
        }
        return null;
    }
}

啟動服務

@SpringBootApplication
@EnableEurekaServer
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

先啟動Eureka Server,再啟動Eureka Client,在管理頁面上看到服務都起成功時,訪問127.0.0.1/8020/sentence 可以得到一個隨機組成的句子

Eureka整合Spring Config Server

在git的repository里添加application.yml

 eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8010/eureka/

啟動實戰(zhàn)(一)中的Spring Cloud Config Server

修改各個client的配置

application.yml移除屬性eureka.client.serviceUrl.defaultZone

bootstrap.yml添加屬性 spring.cloud.config.uri: http://localhost:8001

pom.xml添加依賴spring-cloud-config-client

依次啟動Config Server,Eureka Server,Eureka Client,在管理頁面上看到服務都起成功時,訪問127.0.0.1/8020/sentence 可以得到一個隨機組成的句子
-

如果你想把words信息也放入repository呢?在application.yml中添加,如下信息,各個client啟動的時候加上-Dspring.profiles.active對應到相應的啟動參數(shù)就行了.

    ---
  spring:
    profiles: subject
  words: I,You,He,She,It
  
  ---
  spring:
    profiles: verb
  words: ran,knew,had,saw,bought

  ---
  spring:
    profiles: article
  words: a,the

  ---
  spring:
    profiles: adjective
  words: reasonable,leaky,suspicious,ordinary,unlikely

  ---
  spring:
    profiles: noun
  words: boat,book,vote,seat,backpack,partition,groundhog  
構建Eureka Server集群

host文件中添加 (c:WINDOWSsystem32driversetchosts).

  127.0.0.1       eureka-primary
  127.0.0.1       eureka-secondary
  127.0.0.1       eureka-tertiary

Eureka Server的application.yml添加多個profiles,和instanceId

 ---
spring:
  application:
    name: eureka-server-clustered   
  profiles: primary
server:
  port: 8011  
eureka:
  instance:
    hostname: eureka-primary       
  ---
spring:
  application:
    name: eureka-server-clustered      
  profiles: secondary
server:
  port: 8012
eureka:
  instance:
    hostname: eureka-secondary       
 ---
spring:
  application:
    name: eureka-server-clustered      
  profiles: tertiary
server:
  port: 8013
eureka:
  instance:
    hostname: eureka-tertiary       

此時Eureka Server 同時也是個Eureka Client,需要設置eureka.client.serviceUrl.defaultZone,值是另外兩個,最終會是下面這樣

---
spring:
  application:
    name: eureka-server-clustered   
  profiles: primary
server:
  port: 8011  
eureka:
  instance:
    hostname: eureka-primary       
  client:
    registerWithEureka: true
    fetchRegistry: true        
    serviceUrl:
      defaultZone: http://eureka-secondary:8012/eureka/,http://eureka-tertiary:8013/eureka/

---
spring:
  application:
    name: eureka-server-clustered      
  profiles: secondary
server:
  port: 8012
eureka:
  instance:
    hostname: eureka-secondary       
  client:
    registerWithEureka: true
    fetchRegistry: true        
    serviceUrl:
      defaultZone: http://eureka-tertiary:8013/eureka/,http://eureka-primary:8011/eureka/

---
spring:
  application:
    name: eureka-server-clustered      
  profiles: tertiary
server:
  port: 8013
eureka:
  instance:
    hostname: eureka-tertiary       
  client:
    registerWithEureka: true
    fetchRegistry: true    
    serviceUrl:
      defaultZone: http://eureka-primary:8011/eureka/,http://eureka-secondary:8012/eureka/      

以-Dspring.profiles.active=primary (and secondary, and tertiary)為啟動參數(shù)分別啟動Eureka Server

修改所有Eureka Client的eureka.client.serviceUrl.defaultZone值為http://eureka-primary:8011/eu...逗號分隔,無空白),集群啟動成功登錄管理頁面查看,如下圖所示即成功

再啟動所有的Eureka Clients,查看http://localhost:8020/sentence 是否成功

為了測試容錯性,關掉兩個Eureka Client,重啟若干個Eureka Client,觀察啟動是否報錯,再去查看查看http://localhost:8020/sentence 是否成功

特別感謝 kennyk65
Spring Cloud 中文用戶組 31777218
Spring-Cloud-Config 官方文檔-中文譯本 (本人有參與,哈哈)
Spring Cloud Netflix 官網文檔-中文譯本
本文實例github地址 mmb-eureka

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/64983.html

相關文章

  • Spring Cloud實戰(zhàn)(五)-Spring Cloud Netflix Hystrix

    摘要:實戰(zhàn)五概要什么是怎么用常見配置介紹什么是是分布式系統(tǒng)處理超時和錯誤的機制如下圖所示分布式系統(tǒng)中某個用戶請求依賴服務當此請求并發(fā)超過的時候服務處理速度變慢但是服務還是被調用大量請求會阻塞在服務器上影響其它整個服務在復雜的分布式架構的應用程序 Spring Cloud實戰(zhàn)(五)-Spring Cloud Netflix Hystrix 概要 什么是Spring Cloud Netflix...

    CrazyCodes 評論0 收藏0
  • Spring Cloud Admin 實戰(zhàn)

    摘要:簡介用于監(jiān)控基于的應用,它是在的基礎上提供簡潔的可視化。提供了很多功能,如顯示和,顯示在線狀態(tài),的日志級別管理,線程管理,管理等。 Spring Cloud Admin 簡介 Spring Boot Admin 用于監(jiān)控基于 Spring Boot 的應用,它是在 Spring Boot Actuator 的基礎上提供簡潔的可視化 WEB UI。Spring Boot Admin 提供...

    MrZONT 評論0 收藏0
  • Spring Cloud 上手實戰(zhàn)-架構解析及實作

    摘要:服務器將要監(jiān)聽的端口不要使用服務進行注冊不要在本地緩存注冊表信息使用一個新的注解,就可以讓我們的服務成為一個服務服務發(fā)現(xiàn)客戶端配置以為例需要做件事情成為服務發(fā)現(xiàn)的客戶端配置對應來說我們只需要配置如下啟動運行查看。 Spring簡介 為什么要使用微服務 單體應用: 目前為止絕大部分的web應用軟件采用單體應用,所有的應用的用戶UI、業(yè)務邏輯、數(shù)據庫訪問都打包在一個應用程序上。 showI...

    Godtoy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<