(二)服務的提供與Feign調用

本文中有三個角色掷豺,分別是服務的提供者当船,服務的消費者默辨,注冊中心Eureka
整體流程:
(1)先啟動注冊中心Eureka
(2)啟動服務的提供者缩幸,將服務注冊到注冊中心Eureka上對外提供服務
(3)啟動服務的消費者,在注冊中心中找到服務并完成消費

1盖喷、服務提供者

(1)pom.xm

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>producer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>producer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</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-client</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>

(2)配置文件application.yml

server:
  port: 8090
spring:
  application:
    name: spring-cloud-producer
eureka:
  server:
    enable-self-preservation: false #關閉eureka的自我保護暮刃,防止已被關停的節(jié)點也錯誤的顯示在線
  client:
    register-with-eureka: true #否允許客戶端向Eureka 注冊表獲取信息椭懊,服務器為設置為false,客戶端設置為true
    fetch-registry: true #是否允許向Eureka Server注冊信息 如果是服務器端氧猬,應該設置為false
    service-url:
      defaultZone: http://peer1:8761/eureka/ #此eureka server的應用注冊地址

(3)啟動類ProducerApplication.java

@SpringBootApplication
@EnableEurekaClient //如果是其他注冊中心可以使用注解@EnableDiscoveryClient來進行服務的注冊
public class ProducerApplication {

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

}

(4)Controller

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(@RequestParam String name) {
        return "hello "+name+",producer is ready";
    }
}
2、服務消費者

(1)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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>consumers</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumers</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</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-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</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>

(2)application.yml

server:
  port: 8091
spring:
  application:
    name: spring-cloud-consumers
eureka:
  server:
    enable-self-preservation: false #關閉eureka的自我保護奕纫,防止已被關停的節(jié)點也錯誤的顯示在線
  client:
    register-with-eureka: true #否允許客戶端向Eureka 注冊表獲取信息匹层,服務器為設置為false,客戶端設置為true
    fetch-registry: true #是否允許向Eureka Server注冊信息 如果是服務器端升筏,應該設置為false
    service-url:
      defaultZone: http://peer1:8761/eureka/ #此eureka server的應用注冊地址

(3)啟動類ConsumersApplication.java

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients //這個注解是通知SpringBoot在啟動的時候您访,掃描被 @FeignClient 修飾的類
public class ConsumersApplication {

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

}

(4)Feign遠程調用灵汪,創(chuàng)建一個remote接口

@FeignClient(name= "spring-cloud-producer")
public interface HelloRemote {
    @RequestMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}

(5)Controller

@RestController
public class HelloController {

    @Autowired
    private HelloRemote helloRemote;

    @RequestMapping("/hello")
    public String hello(@RequestParam("name") String name) {
        return helloRemote.hello(name);
    }
}

依次啟動eureka峻凫,producer,consumer三個項目譬胎,
在瀏覽器輸入http://localhost:8090/hello?name=springcloud银择,可以看到producer啟動正常浩考。
在瀏覽器輸入http://localhost:8091/hello?name=spring析孽,可以看到客戶端成功通過feign調用了遠程服務hello袜瞬。

負載均衡

復制一份producer邓尤,修改名稱為producer2汞扎,同時修改相應pom文件擅这,修改application.yml中端口號為8092仲翎,修改Controller如下:

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(@RequestParam String name) {
        return "hello "+name+"溯香,producer2 is ready";
    }
}

啟動producer2玫坛,可以看到應用名為spring-cloud-producer的有兩臺機器。
我們再去訪問消費端的http://localhost:8091/hello?name=spring杜窄,可以看到producer和producer2輪流打印塞耕,說明注冊中心提供了服務負載均衡功能扫外。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末筛谚,一起剝皮案震驚了整個濱河市驾讲,隨后出現的幾起案子吮铭,更是在濱河造成了極大的恐慌谓晌,老刑警劉巖纸肉,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異预吆,居然都是意外死亡,警方通過查閱死者的電腦和手機扇商,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門案铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梆靖,“玉大人,你說我怎么就攤上這事乎婿⌒霍幔” “怎么了森逮?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長璃搜。 經常有香客問我鳞上,道長篙议,這世上最難降的妖魔是什么鬼贱? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任舟误,我火速辦了婚禮嵌溢,結果婚禮上赖草,老公的妹妹穿的比我還像新娘秧骑。我一直安慰自己乎折,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著士修,像睡著了一般棋嘲。 火紅的嫁衣襯著肌膚如雪沸移。 梳的紋絲不亂的頭發(fā)上雹锣,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音攒射,去河邊找鬼会放。 笑死钉凌,一個胖子當著我的面吹牛御雕,可吹牛的內容都是我干的饮笛。 我是一名探鬼主播福青,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼媒役,長吁一口氣:“原來是場噩夢啊……” “哼酣衷!你這毒婦竟也來了穿仪?” 一聲冷哼從身側響起啊片,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤紫谷,失蹤者是張志新(化名)和其女友劉穎笤昨,沒想到半個月后瞒窒,有當地人在樹林里發(fā)現了一具尸體根竿,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了匿辩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铲球。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡选侨,死狀恐怖援制,靈堂內的尸體忽然破棺而出芍瑞,到底是詐尸還是另有隱情拆檬,我是刑警寧澤竟贯,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布噪珊,位于F島的核電站痢站,受9級特大地震影響阵难,放射性物質發(fā)生泄漏呜叫。R本人自食惡果不足惜朱庆,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一娱颊、第九天 我趴在偏房一處隱蔽的房頂上張望箱硕。 院中可真熱鬧剧罩,春花似錦惠昔、人聲如沸舰罚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲漾。三九已至,卻和暖如春缕溉,著一層夾襖步出監(jiān)牢的瞬間考传,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工证鸥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留僚楞,地道東北人枉层。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓泉褐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸟蜡。 傳聞我的和親對象是個殘疾皇子膜赃,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容