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

SpringCloud服務的發(fā)現與調用詳解

 更新時間:2022年07月16日 14:14:36   作者:_時光煮雨  
在Java微服務越來越火的今天。幾乎什么公司都在搞微服務。而使用的比較多的就是Spring?Cloud技術棧。今天就來研究一下Spring?Cloud中服務發(fā)現與調用的基本原理

相關推薦

上一章:Eureka注冊中心

前言

上一章中,我們介紹了Eureka注冊中心及集群的搭建,這一節(jié)將介紹服務的發(fā)現和調用。注意,這個時候我們只有注冊中心,并沒有引入其他的組件,所以需要使用SpringCloud原生態(tài)的服務發(fā)現和調用的方式實現,循序漸進的帶你走入微服務的世界。

上篇文章我們已經創(chuàng)建好了注冊中心,這次我們需要創(chuàng)建一個服務提供者(provider)和一個服務消費者(consumer)兩個項目。

一、服務提供者

  • 新建Maven項目provider
  • 引入項目依賴
    <parent>
        <groupId>com.cxy965</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
    <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-client</artifactId>
        </dependency>
    </dependencies>

新建配置文件application.yml

server:
  port: 8002
spring:
  application:
    name: provider
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
    fetch-registry: true

創(chuàng)建啟動類和服務接口,為了簡便,暫時將服務接口放在了啟動類,實際項目中,最好還是要放在controller中。

@EnableEurekaClient
@SpringBootApplication
@RestController
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello(String name) {
       return "Hello "+name;
    }
}

啟動驗證一下,可以正常返回。

二、服務消費者

  • 參考provider項目創(chuàng)建consumer項目
  • 修改配置文件中的端口和應用名稱為8003、consumer
  • 創(chuàng)建啟動類和服務消費代碼
@EnableEurekaClient
@SpringBootApplication
@RestController
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    @Autowired
    DiscoveryClient discoveryClient;
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/hello")
    public String hello(String name) {
        List<ServiceInstance> list = discoveryClient.getInstances("provider");
        ServiceInstance instance = list.get(0);
        String host = instance.getHost();
        int port = instance.getPort();
        String returnInfo = restTemplate.getForObject("http://" + host + ":" + port + "/hello?name={1}", String.class, name);
        return returnInfo;
    }
}

啟動驗證一下

可以看到,我們調用8003消費者服務,消費者服務又調用了8002服務提供者的接口,并正確返回了結果。

總結

我們來分析一下消費者代碼,我們先創(chuàng)建了一個RestTemplate Bean實例,然后注入進來,同時注入discoveryClient對象。

在接口中,通過discoveryClient.getInstances("provider")方法獲取注冊到注冊中心中的所有provider服務信息ServiceInstance集合,ServiceInstance其實是一個接口,真正的實現類是EurekaServiceInstance,通過查看EurekaServiceInstance的源碼,我們發(fā)現它里面包含了注冊中心中各服務的豐富的詳細信息(如主機地址、端口號、實例id,應用名稱、應用組名稱等)。

我們先拿到第一個服務提供者的的ip和端口(集群部署情況下,可能會有多個實例),然后通過調用restTemplate.getForObject()方法進行接口的調用并獲取返回信息。

這樣就通過原生態(tài)的方式實現了服務的發(fā)現和調用。

拿到第一個實例進行接口的調用,顯然沒有達到部署多服務實例的目的,下一篇文章將帶你實現一個自定義的負載均衡器,一起期待吧!

到此這篇關于SpringCloud服務的發(fā)現與調用詳解的文章就介紹到這了,更多相關SpringCloud服務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談JAVA實現選擇排序,插入排序,冒泡排序,以及兩個有序數組的合并

    淺談JAVA實現選擇排序,插入排序,冒泡排序,以及兩個有序數組的合并

    這篇文章主要介紹了JAVA實現選擇排序,插入排序,冒泡排序,以及兩個有序數組的合并,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Spring的編程式事務和聲明式事務詳解

    Spring的編程式事務和聲明式事務詳解

    這篇文章主要介紹了Spring的編程式事務和聲明式事務的相關內容,涉及Spring事務屬性、Spring事務的基本類等知識,需要的朋友可以了解下。
    2017-09-09
  • 詳解SpringBoot Schedule配置

    詳解SpringBoot Schedule配置

    本篇文章主要介紹了詳解SpringBoot Schedule配置 ,可以實現定時任務,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java web數據可視化實現原理解析

    Java web數據可視化實現原理解析

    這篇文章主要介紹了Java web數據可視化實現原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 詳解IDEA中MAVEN項目打JAR包的簡單方法

    詳解IDEA中MAVEN項目打JAR包的簡單方法

    本篇文章主要介紹了詳解IDEA中MAVEN項目打JAR包的簡單方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java容器源碼LinkedList原理解析

    Java容器源碼LinkedList原理解析

    這篇文章主要介紹了Java容器源碼LinkedList原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Spring Cloud Hystrix 線程池隊列配置(踩坑)

    Spring Cloud Hystrix 線程池隊列配置(踩坑)

    這篇文章主要介紹了Spring Cloud Hystrix 線程池隊列配置(踩坑),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • IDEA強制清除Maven緩存的方法示例

    IDEA強制清除Maven緩存的方法示例

    這篇文章主要介紹了IDEA強制清除Maven緩存的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java實現計網循環(huán)冗余檢驗算法的方法示例

    Java實現計網循環(huán)冗余檢驗算法的方法示例

    這篇文章主要給大家介紹了關于Java實現計網循環(huán)冗余檢驗算法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • SpringBoot注解@ConditionalOnClass底層源碼實現

    SpringBoot注解@ConditionalOnClass底層源碼實現

    這篇文章主要為大家介紹了SpringBoot注解@ConditionalOnClass底層源碼實現,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

荥阳市| 南开区| 崇左市| 尼勒克县| 姚安县| 壶关县| 蓬溪县| 洛宁县| 辛集市| 海林市| 海宁市| 稷山县| 荆州市| 阿坝县| 华宁县| 内江市| 大宁县| 墨脱县| 罗平县| 喀喇沁旗| 镇雄县| 琼海市| 六枝特区| 富源县| 临泽县| 团风县| 苗栗市| 文昌市| 潞西市| 汶川县| 大渡口区| 阿拉善右旗| 阳信县| 玉树县| 东乌珠穆沁旗| 东方市| 阳西县| 呈贡县| 格尔木市| 富平县| 兰考县|