SpringCloud+ribbon+restTemplate的服務(wù)調(diào)用

SpringCloud的服務(wù)調(diào)用方式


1.基于ribbon-restTemplate的調(diào)用方式
  ribbon是一個(gè)很好的負(fù)載均衡客戶端优妙,可以很好的控制http和tcp的行為
 他也是我們今天要使用的服務(wù)調(diào)用方式功咒。
2.基于Feign的服務(wù)調(diào)用方式
 feign默認(rèn)集成了ribbon

ribbon的官方源碼


基于上一篇搭建好的基于Eureka注冊(cè)中心的小項(xiàng)目繼續(xù)進(jìn)行消費(fèi)者和生產(chǎn)者的調(diào)用搭建
我們新建一個(gè)springboot項(xiàng)目作為我們的負(fù)載均衡客戶端向注冊(cè)中心注冊(cè)年枕。

創(chuàng)建maven的子模塊

創(chuàng)建出來的pom文件如下

<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>
    <parent>
        <groupId>com.springcloud</groupId>
        <artifactId>com.springcloud.example</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>eurekaRibbon</artifactId>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.7</java.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>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

接下來是我們的application.yml的配置,我們向注冊(cè)中心注冊(cè)客戶端的基本操作

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: service-ribbon

下一步我們開始編寫我們的springboot啟動(dòng)類
包結(jié)構(gòu)如下芳悲,啟動(dòng)類沒有配置從哪里掃描的話贮喧,默認(rèn)從自己的子目錄下掃描栅盲,所以我放在最頂級(jí)包


ribbon的包結(jié)構(gòu)

啟動(dòng)類如下

@SpringBootApplication
//標(biāo)識(shí)我們?yōu)榭砂l(fā)現(xiàn)的客戶端
@EnableDiscoveryClient
public class EurekaRibbonApplication {
    public static void main(String[] args) {
        //啟動(dòng)類啟動(dòng)我們?cè)擁?xiàng)目掷邦,加載application.yml配置文件
        SpringApplication.run(EurekaRibbonApplication.class, args);
    }
    
    //配置bean
    @Bean
    //開啟負(fù)載均衡
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

controller層

/**
 * @author zzy65
 * 消費(fèi)者的controller
 */
@RestController
public class HelloController {
    
    @Autowired
    private HelloService helloService;
    
    @RequestMapping("/hello")
    public String sayHello(@RequestParam String name){
        return helloService.sayHello(name);
        
    }

}

service層 接口就不貼出來了

@Service
public class HelloServiceImpl implements HelloService {
    
    @Autowired
    private RestTemplate restTemplate;

    public String sayHello(String name) {
        //調(diào)用生產(chǎn)者的服務(wù)返回信息
        return restTemplate.getForObject("http://SERVICE-SAYHI/hi?name="+name, String.class);
    }

}

接下來我們啟動(dòng)項(xiàng)目白胀,先啟動(dòng)昨日的注冊(cè)中心。
啟動(dòng)了一個(gè)注冊(cè)中心抚岗,兩個(gè)生產(chǎn)者的實(shí)例


生產(chǎn)者實(shí)例

然后我們啟動(dòng)我們的ribbon開啟負(fù)載均衡
這里如果按照我的pom文件的話或杠,應(yīng)該會(huì)報(bào)錯(cuò),加一個(gè)jackson的包就好了宣蔚,因?yàn)橛昧藃estController注解向抢,是默認(rèn)的使用了jackson包的认境。
這里由于我的誤操作,ribbon第一次啟動(dòng)沒有成功挟鸠,進(jìn)入了保護(hù)模式叉信,上一篇文章有解決方案。
總之到了最后我們終于成功啟動(dòng)了艘希,接下來訪問下試試硼身。


啟動(dòng)ribbon

連續(xù)訪問了兩次,是兩個(gè)不同的端口號(hào)覆享,證明負(fù)載均衡是成功了佳遂,而我連續(xù)的訪問多幾次發(fā)現(xiàn)是端口交替出現(xiàn)的,我猜測(cè)負(fù)載均衡的默認(rèn)策略是輪詢淹真。


第一次
第二次

以下是現(xiàn)在整個(gè)項(xiàng)目的架構(gòu)圖讶迁。
eureka ribbon

今天學(xué)會(huì)了markdown插入代碼和一些命令,很開心核蘸。另外送自己一句話巍糯,一直警示自己吧。

大多數(shù)人25歲就已經(jīng)死了客扎,75歲才埋葬祟峦。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市徙鱼,隨后出現(xiàn)的幾起案子宅楞,更是在濱河造成了極大的恐慌,老刑警劉巖袱吆,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌衙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绞绒,警方通過查閱死者的電腦和手機(jī)婶希,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓬衡,“玉大人喻杈,你說我怎么就攤上這事≌恚” “怎么了筒饰?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壁晒。 經(jīng)常有香客問我瓷们,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任谬晕,我火速辦了婚禮式镐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘固蚤。我一直安慰自己娘汞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布夕玩。 她就那樣靜靜地躺著你弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燎孟。 梳的紋絲不亂的頭發(fā)上禽作,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音揩页,去河邊找鬼旷偿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爆侣,可吹牛的內(nèi)容都是我干的萍程。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼兔仰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茫负!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乎赴,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤忍法,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后榕吼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饿序,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年羹蚣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了原探。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡度宦,死狀恐怖踢匣,靈堂內(nèi)的尸體忽然破棺而出告匠,到底是詐尸還是另有隱情戈抄,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布后专,位于F島的核電站划鸽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裸诽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一嫂用、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丈冬,春花似錦嘱函、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蓄氧,卻和暖如春函似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喉童。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工撇寞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堂氯。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓蔑担,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親咽白。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钟沛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容