1. 程式人生 > >Spring Cloud中服務的發現與消費 (3)

Spring Cloud中服務的發現與消費 (3)

轉自 https://blog.csdn.net/u012702547/article/details/77823434

這個系列我感覺真的太好了,可以一步一步的瞭解spring cloud 的搭建以及更深層次的東西,對想學這門技術的朋友真的入門特別的快,感謝這位大哥的分享,我也會持續的更新過來。

----------------------------------------------------------------------------------------------------------------------------------------------------------

通過前面兩篇文章(

使用Spring Cloud搭建服務註冊中心使用Spring Cloud搭建高可用服務註冊中心)的學習,相信小夥伴們已經可以自己搭建一個單節點或者多節點的服務註冊中心了,同時也能夠向這個服務註冊中心去註冊服務。服務註冊成功了,我們就該發現和消費服務了,今天我們就來看看如何實現服務的發現與消費(由於前面兩篇文章是本文的基礎,因此建議小夥伴們先閱讀前面兩篇文章,否則直接閱讀本文會有點丈二和尚摸不著頭腦)。

如何實現

服務的發現和消費實際上是兩個行為,這兩個行為要由不同的物件來完成:服務的發現由Eureka客戶端來完成,而服務的消費由Ribbon來完成。Ribbo是一個基於HTTP和TCP的客戶端負載均衡器,當我們將Ribbon和Eureka一起使用時,Ribbon會從Eureka註冊中心去獲取服務端列表,然後進行輪詢訪問以到達負載均衡的作用,服務端是否線上這些問題則交由Eureka去維護。OK,下面我們將通過一個簡單的案例,來看看如何實現服務的發現與消費。

開啟註冊中心

這裡的服務註冊中心我們還是使用上篇文章中建立的eureka-server工程,為了測試方便,我這裡直接啟動一個單節點工程就OK了。

註冊服務

註冊服務也和上篇文章一樣,也使用provider工程,不同的是,這裡我將provider工程打成一個jar包,然後用命令啟動,啟動兩個例項,方便我一會觀察負載均衡的效果。打成jar的過程很簡單,雙擊package,然後在target目錄下找到對應的jar

然後通過下面兩行命令啟動兩個服務提供者的例項,如下:

java -jar provider-0.0.1-SNAPSHOT.jar --server.port=8080  
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=8081

此時,在服務註冊中心我們可以看到有兩個服務提供者註冊成功了,如下:

(我這裡8081埠被佔用了 所以我用了8082)


OK,如此之後,服務提供者就準備好了,接下來我們來看看服務消費者要怎麼實現。

開發客戶端

建立Spring Boot專案

首先建立一個Spring Boot專案,然後新增Eureka和Ribbon依賴,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>org.sang</groupId>
    <artifactId>ribbon-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>ribbon-consumer</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.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>Dalston.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</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>
</project>

這裡重點是添加了spring-cloud-starter-eurekaspring-cloud-starter-ribbon依賴。

配置啟動入口類

入口類上我們需要做兩件事:

1.亮明Eureka客戶端身份  

首先在入口類上新增@EnableDiscoveryClient註解,表示該應用是一個Eureka客戶端應用,這樣該應用就自動具備了發現服務的能力。

2.提供RestTemplate的Bean  

RestTemplate可以幫助我們發起一個GET或者POST請求,這個我們在後文會詳細解釋,這裡我們只需要提供一個RestTemplate  Bean就可以了,在提供Bean的同時,新增@LoadBalanced註解,表示開啟客戶端負載均衡。

OK,基於以上兩點,我們的入口類如下:

@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {

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

建立Controller

建立一個Controller類,並向Controller類中注入RestTemplate物件,同時在Controller中提供一個名為/ribbon-consumer的介面,在該介面中,我們通過剛剛注入的restTemplate來實現對HELLO-SERVICE服務提供的/hello介面進行呼叫(上篇文章中我們有詳細介紹HELLO-SERVICE的實現)。在呼叫的過程中,我們的訪問地址是HELLO-SERVICE,而不是一個具體的地址。OK,基於以上理解,我們的Controller如下:

@RestController
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping(value = "/ribbon-consumer",method = RequestMethod.GET)
    public String helloController() {
        return restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody();
    }
}

配置服務註冊中心的位置

最後我們需要在application.properties中配置服務註冊中心的位置,如下:

spring.application.name=ribbon-consumer  
server.port=8093
eureka.client.service-url.defaultZone=http://peer1:1111/eureka

注意服務消費者的埠號不要和前面的埠號衝突。

啟動並測試

此時我們就可以啟動我的客戶端了,啟動之後,我們首先在Eureka中看到了我的客戶端,如下:



然後我們向localhost:8093/ribbon-consumer地址發起請求,就可以看到provider工程中/hello介面返回的Hello World


那麼這個時候有小夥伴可能會有疑問,這個Hello World是由哪一個provider提供的?

重新整理幾次 http://localhost:8093/ribbon-consumer,可以看到倆個埠的日誌在交替,說明負載均衡起到了作用


小夥伴們看到Ribbon輸出了當前客戶端維護的HELLO-SERVICE的服務列表情況,每一個provider的位置都展示出來,Ribbon就是按照這個列表進行輪詢,進而實現基於客戶端的負載均衡。同時這裡的日誌還輸出了其他資訊,比如各個例項的請求總數量,第一次連線資訊,上一次連線資訊以及總的請求失敗數量等。


這一節學習完了,對服務者,消費者都有了瞭解,還對Ribbon實現負載均衡有了一個簡單的認識,接下來會持續更新。

相關推薦

Spring Cloud服務發現消費 3

轉自 https://blog.csdn.net/u012702547/article/details/77823434這個系列我感覺真的太好了,可以一步一步的瞭解spring cloud 的搭建以及更深層次的東西,對想學這門技術的朋友真的入門特別的快,感謝這位大哥的分享,我

Spring Cloud Eureka —— 服務發現消費

ribbon簡單介紹 1服務發現的任務由Eureka的客戶端完成,服務消費的任務由Ribbon完成。 2Ribbon是一個基於HTTP和TCP的客戶端負載均衡器,它可以在通過客戶端中配置的ribbonServerList服務端列表去輪詢訪問以達到負載均衡的作用。 構建例

Spring Cloud服務提供呼叫03

上一篇文章我們介紹了eureka服務註冊中心的搭建,這篇文章介紹一下如何使用eureka服務註冊中心,搭建一個簡單的服務端註冊服務,客戶端去呼叫服務使用的案例。 案例中有三個角色:服務註冊中心、服務提供者、服務消費者,其中服務註冊中心就是我們上一篇的eureka單機版啟動既可,流程是首先啟動註冊

Spring cloud Hystrix 服務容錯保護---斷路器3- 請求快取

Hystrix有兩種方式來應對高併發場景:請求快取和請求合併。 請求快取:當系統併發量越來越大,每個微服務都要承受很大的壓力,因為請求依賴服務的資源需要通過通訊來實現,如果每一此都去服務提供者的伺服器去請求服務,獲得資料,那麼高併發的情況下,效能會低下,Hystrix提供了

Spring Cloud 服務發現註冊Eureka

一、簡要說明: 服務發現與註冊:方便各服務之間自動註冊,呼叫時直接調服service_id,不需關心具體的業務部署情況;方便後續需實現的負載均衡等功能。 二、環境說明: spring:2.1.0.RELEASE maven:3.5.3 JDK:1.8 IDE:In

Spring Cloud 服務發現註冊Eureka- 客戶端

一、環境說明: spring:2.1.0.RELEASE maven:3.5.3 JDK:1.8 IDE:IntelliJ IDEA  2018.2 二、實現步驟 a:新建專案:File->New->Project... b、填寫專案資訊: G

服務實施Spring Cloud踩過的坑

div href 發現 .wang blog log ring clas bds http://tietang.wang/2016/09/08/%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%

Spring Cloud Consul—服務發現Consul

列表 當前 host static 實例 cati edi 上下文 ota 服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Consul通過HTTP API和DNS提供服務發現服務。Spring Cloud Consul

Spring Cloud-02服務發現服務註冊Eureka + Eureka Server的搭建

文章目錄 服務發現元件概述 Eureka概述 Eureka原理 Maven父子工程的搭建 Eureka Server的搭建 新建 Maven Module 新增spring-cloud-starter-eureka-s

SpringCloud實戰二:Spring Cloud Eureka 服務發現註冊中心

  Spring Cloud Eureka 它是通過封裝 Netflix 開源的Eureka,一款基於 Rest 的服務發現與註冊元件,包括 Eureka Server 和 Eureka Client,最新版本為2018年8月釋出的1.9.4版本,最新的2.x版本已經不再開源,但是1.9

四:Spring Cloud服務發現呼叫-Ribbon

1. 簡介 Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. F

spring cloud服務快速教程之 Spring Cloud Alibaba--nacos(一)、服務註冊發現

0、前言   什麼是Spring Cloud Alibaba?   Spring Cloud Alibaba 是阿里開源的,致力於提供微服務開發的一站式解決方案。此專案包含開發分散式應用微服務的必需元件,方便開發者通過 Spring Cloud 程式設計模型輕鬆使用這些元件來開發分散式應用服務。  

spring cloud服務之eureka使用新建eureka服務

eurekaz作為spring cloud中的雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。下面簡單為大家說下eureka的簡單入門使用,次節講解新建一個eureka 服務端及其客戶端專案。一、新建一個eureka服務端專案   

Spring CloudFeign的繼承特性 12

轉自 https://blog.csdn.net/u012702547/article/details/77823434 這個系列我感覺真的太好了,可以一步一步的瞭解spring cloud 的搭建以及更深層次的東西,對想學這門技術的朋友真的入門特別的快,感謝這位大哥的分享,我也會持

spring cloud服務快速教程之熔斷器(Hystrix)及其工具Dashboard、Turbine

0-為什麼需要熔斷器   在分散式系統中,各個服務相互呼叫相互依賴,如果某個服務掛了,很可能導致其他呼叫它的一連串服務也掛掉或者在不斷等待中耗盡伺服器資源,這種現象稱之為雪崩效應;   未來防止系統雪崩,熔斷機制必不可少,就是當一個服務掛掉後,呼叫它的服務能快速熔斷,不再耗費資源,快速失敗並提供回退方案;

服務搭建管理3

code use 添加 pass 指定 緩沖 work shell 系統 服務器192.168.9.38 work-1192.168.9.39 work-2 添加普通用戶2.1 創建用戶文件夾[root@work-1 ~]# mkdir /app/userhome -p[r

服務治理:Spring Cloud Eureka服務發現消費

        Ribbon是基於HTTP和TCP的客戶端負載均衡器,可以在通過客戶端配置的ribbonServerList服務端列表去輪詢訪問達到均衡負載的作用。當其與Ribbon聯合使用時,其ribbonServerList會被DiscoveryEnalbedNIWServerList重寫,擴充套件成從E

Spring Cloud Eureka 5 (服務發現消費-簡單的robbin使用)

boot ng- clas hello enabled 中心 相同 service 服務註冊 通過上述介紹,我們已經有了服務註冊中心和服務提供者 下面我們來嘗試構建一個服務的消費者 它要完成兩個功能,發現服務和消費服務,其中發現服務由eureka客戶端完成,消費服務由rib

構建微服務架構Spring Cloud服務註冊發現Eureka、Consul

comm 簡介 foundry 架構 eas args 包含 什麽 其他 Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全

Spring Cloud 學習筆記二(服務發現消費)

配置高可用註冊中心 Eureka Server 的高可用就是指將服務註冊中心本身向其他服務註冊中心註冊自己,這樣就可以實現服務清單的同步,增強系統可用性,而不是單節點的服務註冊中心。 在學習筆記一里,我們設定過如下兩個引數 eureka.client.regis