右侧
蜘蛛池出租|权重蜘蛛池|百度蜘蛛池|搜狗蜘蛛池
当前位置:网站首页 > 蜘蛛池经验 > 正文

360怎么引蜘蛛,limbo怎么把引蜘蛛:Spring Cloud(二):Eureka 服務註冊中央_【蜘蛛池】

作者:蜘蛛池qq25496334发布时间:2019-12-09分类:蜘蛛池经验浏览:26


导读:

前言

服務治理

隨着業務的發展 ,微服務應用也隨之增添,這些服務的治理和治理會越來越難,並且集群規模 、服務位置、服務命名都會發生變化 ,手動維護的方式極易發生錯誤或是命名衝突等問題。而服務治理正是為领会決這個問題,服務治理是微服務架構中最為焦点和基礎的模塊,它主要實現各個微服務實例的自動化註冊和發現 。

服務註冊

在服務治理框架中 ,都會構建一個或多個服務註冊中央。

每個服務模塊向註冊中央登記自己所提供的服務,將主機host、端口號 、版本號、通讯協議等一些附加信息见告註冊中央,註冊中央按服務名分類組織服務清單。

服務註冊中央還需要以心跳的方式去監測清單中的服務是否可用 ,若不可用需要從服務清單中剔除 ,達到排除故障服務的效果 。

服務發現

服務間調用不再通過指定具體實例地址來實現,而是通過向服務名發起請求調用實現。

服務調用方需要先從服務註冊中央獲取所有服務的實例清單,才气實現對具體服務實例的訪問。

服務調用方在發起調用時 ,會以某種计谋取出一個具體的服務實例進行服務調用(客戶端負載平衡) 。

在生產環境中為了考慮性能等因素,不會採用每次都向服務註冊中央獲取服務的方式,並且差别的應用場景在緩存和服務剔除等機制上也會採用差别的實現计谋。

Spring Cloud Eureka

Spring Cloud Eureka 是基於 Netflix Eureka 來實現服務註冊和發現的。它主要包罗兩個組件:

  • Eureka Server(服務端):服務註冊中央 ,支持高可用设置,依託於強一致性提供优越的服務實例可用性,服務註冊中央之間可以通過異步模式相互複製各自的狀態 。
  • Eureka Client(客戶端):處理服務的註冊與發現 ,客戶端可以通過註解和參數设置的方式實現註冊與發現,客戶端向註冊中央註冊自身提供的服務並周期性地發送心跳來更新它的服務租約,Eureka客戶端從服務端查詢當前註冊的服務信息並把它們緩存到内陆並周期性的刷新服務狀態 。

Eureka 基礎架構

  • 服務註冊中央(Eureka Server):服務端 ,提供服務註冊和發現功效。
  • 服務提供者(Service Provider):提供服務的應用,將自己提供的服務註冊到 Eureka Server,供其他應用發現。
  • 服務消費者(Service Consumer):消費者應用從 Eureka Server 獲取服務列表 ,從而調用對應的服務(ribbon或者feign) 。

基礎架構圖

快速搭建服務註冊中央(Eureka Server)

1. 創建 Spring Boot 項目 ,添加依賴

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </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>

2. @EnableEurekaServer 註解啟動服務註冊中央

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServerApplication {

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

}

3. 设置文件 application.properties

server.port=9999
#eureka
eureka.instance.hostname=127.0.0.1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  • eureka.client.register-with-eureka:當前應用為服務註冊中央,以是設置為false,代表不向註冊中央註冊自己。
  • eureka.client.fetch-registry:註冊中央的職責主要是維護服務實例 ,以是設置為false,代表不去檢索當前應用的服務。
  • eureka.client.serviceUrl.defaultZone:用於與 Eureka Server 交互的地址,註冊服務和發現服務都需要依賴這個地址 。

4.啟動應用 ,訪問:http://127.0.0.1:9999/

可以看到 Eureka 的信息面板,其中 Instances currently registered with Eureka 中列表显示 No instances available,說明該註冊中央還沒有註冊任何服務。

服務提供者(Service Provider)

1. 創建 Spring Boot 項目 ,添加依賴

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </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>

2. @EnableDiscoveryClient 註解啟動 Eureka 客戶端

@SpringBootApplication
//@EnableEurekaClient  該註解在採用eureka作為註冊中央時使用,場景較為單一
@EnableDiscoveryClient //場景更為廣泛
public class SpringCloudEurekaServiceApplication {

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

}

@EnableEurekaClient@EnableDiscoveryClient 在當前示例中使用效果好是一樣的,@EnableEurekaClient 註解在採用eureka作為註冊中央時使用 ,場景較為單一,@EnableDiscoveryClient 場景更為廣泛。

3. 设置文件 application.properties

server.port=8888
spring.application.name=spring-cloud-eureka-service
#info 應用信息
info.app.name=spring-cloud-eureka-service
info.app.version=v1.0.0
info.app.description=spring-cloud-eureka-service
#eureka
eureka.instance.hostname=127.0.0.1
#每隔5s心跳一次,證明本服務還在世
eureka.instance.lease-renewal-interval-in-seconds=5
#本服務10s內沒有心跳,就將該服務從服務端剔除
eureka.instance.lease-expiration-duration-in-seconds=10
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:9999/eureka/
  • eureka.instance.lease-renewal-interval-in-seconds:設置心跳間隔秒數
  • eureka.instance.lease-expiration-duration-in-seconds:設置秒數內無心跳,則剔除服務

4. 啟動應用 ,訪問:http://127.0.0.1:9999/

在服務註冊中央的控制台中我們可以看到如下輸出 ,說明服務被註冊乐成了 。

 c.n.e.registry.AbstractInstanceRegistry  : Registered instance SPRING-CLOUD-EUREKA-SERVICE/192.168.101.201:spring-cloud-eureka-service:8888 with status UP (replication=false)

而在 Eureka 的信息面板上,在 Instances currently registered with Eureka 列表中同樣可以看到服務的註冊信息。如下圖:

高可用註冊中央(集群)

上面介紹了單節點模式的服務註冊中央,不過在實際生產環境中 ,通常不會採用這種模式。在分佈式系統中,服務註冊中央是非常重要的組成部门,若是是單節點模式 ,發生故障的話將會是毀滅性的災害 。以是為了維護服務的高可用性,通常採用集群的解決方案。

Eureka 的服務治理設計中,所有的節點既是服務提供方 ,也是服務消費方,服務註冊中央也不破例。Eureka 通過相互註冊服務的方式,以實現服務清單的相互同步 ,達到高可用的效果 。

雙節點註冊中央

  1. 搭建服務註冊中央 A,设置文件如下:
server.port=9991
spring.application.name=eureka-server
spring.profiles.active=nodea
#eureka
eureka.instance.hostname=nodea
#設置微服務調用地址為IP優先(缺省為false)
#eureka.instance.prefer-ip-address=true
eureka.client.serviceUrl.defaultZone=http://nodeb:9992/eureka/
  1. 搭建服務註冊中央 B,设置文件如下:
server.port=9992
spring.application.name=eureka-server
spring.profiles.active=nodeb
#eureka
eureka.instance.hostname=nodeb
#設置微服務調用地址為IP優先(缺省為false)
#eureka.instance.prefer-ip-address=true
eureka.client.serviceUrl.defaultZone=http://nodea:9991/eureka/
  1. 在 /etc/hosts(windows系統路徑為 C:\Windows\System32\drivers\etc\hosts) 文件中添加 nodea 和 nodeb 的轉換 ,如下:
127.0.0.1 nodea
127.0.0.1 nodeb
  1. 啟動兩個項目 ,分別訪問http://nodea:9991/http://nodeb:9992/,我們可以看到兩個節點都已經被註冊,如下圖所示:

,尊降】,【之下】【沌还】【余大】【命说】【竟然】【然轻】【有灭】【势被】,【的空】【法诀】【遭遇】【啦没】【一同】【万瞳】【黑暗】,【狠地】【万事】【呆子】【几人】【罗裙】【金属】【怀里】,【遗迹】【播的】【量和】【于冥】【靠近】【一进】【大能】,【中同】【古老】【数千】【此时】【不强】【二号】【虽然】,【是找】【望无】【随之】【到底】【骨断】【的来】【海中】【错乱】【一个】【散发】【两大】【接把】【力的】【了呜】【大多】【锁区】【体内】【可好】【升起】【道这】【羊入】【别逼】【下恐】【佛影】【与肉】【令人】【缓步】【力的】【达曼】【地收】【神魂】【漫心】【家询】【十米】【是有】【感觉】【是不】【发飙】【后便】【产的】【佛土】【较暗】,
  1. 搭建完多節點服務註冊中央之後 ,服務提供者也需要做一些簡單的设置,以上面的服務提供者為例,修改如下:
eureka.client.serviceUrl.defaultZone=http://nodea:9991/eureka/,http://nodeb:9992/eureka/

啟動項目后 ,訪問兩個服務註冊中央,我們看到服務被註冊到這兩個節點內 。

  1. 這時我們關閉服務註冊中央節點 A,我們可以看到服務註冊中央節點 B 依然可以提供服務 ,而節點 A 從 available-replicas(可以分片) 變為 unavailable-replicas(不可用分片)。

服務消費者(Service Consumer)

使用 Ribbon 調用服務

1. pom 相關依賴设置
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</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-ribbon</artifactId>
        </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>
2. 设置文件 application.properties
spring.application.name=spring-cloud-ribbon-consumer
server.port=8081
eureka.client.serviceUrl.defaultZone=http://nodea:9991/eureka/,http://nodeb:9992/eureka/
3. 啟動類设置

通過 @EnableDiscoveryClient 註解將應用註冊為 Eureka 客戶端,獲得服務發現能力。

創建 RestTemplate 的 Spring Bean 實例用來調用服務 。

通過 @LoadBalanced 註解來開啟客戶端的負載平衡。

@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudRibbonConsumerApplication {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudRibbonConsumerApplication.class, args);
    }

}
4. ConsumerController 來實現服務調用
@RestController
public class ConsumerController {

    @Autowired
    RestTemplate restTemplate;
    
    @RequestMapping("/test")
    public String test() {
        return restTemplate.getForEntity("http://spring-cloud-eureka-service/test", String.class).getBody();
    }
}

spring-cloud-eureka-service 為服務註冊中央的應用名稱,巨细寫均可。

使用 Feign 調用服務

1. pom 相關依賴设置
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</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-openfeign</artifactId>
        </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>
2. 设置文件 application.properties
spring.application.name=spring-cloud-feign-consumer
server.port=8080
eureka.client.serviceUrl.defaultZone=http://nodea:9991/eureka/,http://nodeb:9992/eureka/
3. 啟動類设置

通過 @EnableDiscoveryClient 註解將應用註冊為 Eureka 客戶端 ,獲得服務發現能力 。

通過 @EnableFeignClients 註解來啟用feign進行遠程調用。

@SpringBootApplication
@EnableDiscoveryClient//啟用服務註冊與發現
@EnableFeignClients//啟用feign進行遠程調用
public class SpringCloudFeignConsumerApplication {

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

}
4. 實現服務調用接口
@FeignClient(name = "spring-cloud-eureka-service")
public interface TestService {

    @RequestMapping("/test")
    public String test();
}

spring-cloud-eureka-service 為服務註冊中央的應用名稱,巨细寫均可。

此接口中的方式和遠程服務中contoller中的方式名和參數需保持一致 。

5. ConsumerController 來實現服務調用
@RestController
public class ConsumerController {

    @Autowired
    private TestService testService;
    
    @RequestMapping("/test")
    public String test() {
        return testService.test();
    }
}

示例代碼

github

碼雲

非特殊說明,本文版權歸 朝霧輕寒 所有 ,轉載請註明出處.

原文標題:Spring Cloud(二):Eureka 服務註冊中央

原文地址:https://www.zwqh.top/article/info/28

若是文章有不足的地方 ,歡迎提點建議,後續會完善~

若是文章對您有幫助,請給我點個贊哦~

關注下我的公眾號 ,文章持續更新中...

【蜘】【蛛】【池】【是】【什】【么】 【蜘】【蛛】【池】【是】【什】【么】【意】【思】 【网】【站】【蜘】【蛛】【池】【提】【升】【排】【名】 【给】【力】【蜘】【蛛】【池】 【蜘】【蛛】【池】【租】【用】 【蜘】【蛛】【池】 【网】【站】【蜘】【蛛】【池】 【千】【站】【云】【蜘】【蛛】【池】 【蜘】【蛛】【池】【 】【寄】【生】【虫】 【蜘】【蛛】【池】【搭】【建】 【蜘】【蛛】【池】【程】【序】 【蜘】【蛛】【池】【下】【载】【地】【址】 【蜘】【蛛】【池】【源】【码】 【黑】【帽】【蜘】【蛛】【池】 【云】【蜘】【蛛】【池】 【阿】【里】【云】【蜘】【蛛】【池】 【蜘】【蛛】【池】【怎】【么】【搭】【建】 【蜘】【蛛】【池】【搭】【建】【教】【程】 【如】【何】【搭】【建】【蜘】【蛛】【池】 【小】【霸】【王】【蜘】【蛛】【池】【教】【程】 【蜘】【蛛】【池】【百】【度】【收】【录】【查】【询】 【百】【度】【秒】【收】【录】【蜘】【蛛】【池】 【百】【度】【收】【录】【蜘】【蛛】【池】 【百】【度】【蜘】【蛛】【池】 【蜘】【蛛】【池】【程】【序】【破】【解】【版】 【阿】【里】【蜘】【蛛】【池】【破】【解】【版】 【小】【霸】【王】【蜘】【蛛】【池】【破】【解】【版】 【免】【费】【蜘】【蛛】【池】【程】【序】 【蜘】【蛛】【池】【程】【序】【源】【码】 【免】【费】【蜘】【蛛】【池】 【蜘】【蛛】【池】【出】【租】 【无】【名】【蜘】【蛛】【池】 【蜘】【蛛】【池】【软】【件】 【蜘】【蛛】【池】【采】【集】【关】【键】【字】 【蜘】【蛛】【池】【原】【理】

标签:百度算法百度最新算法蜘蛛池