spring-cloud微服務(wù)項(xiàng)目實(shí)戰(zhàn)(5)-feign簡(jiǎn)化客戶端調(diào)用

目標(biāo):

改進(jìn)上一章講的客戶端調(diào)用方式娄柳,集成feign襟士,簡(jiǎn)化客戶端調(diào)用

簡(jiǎn)介:

Fegin是一個(gè)聲明式的web服務(wù)客戶端温圆,它使得編寫web服務(wù)客戶端變得更加容易麻敌,其形態(tài)類似于mybatis對(duì)于dao層的封裝妇汗。

開工:

  1. 在commons創(chuàng)建返回vo模型帘不,以便多系統(tǒng)共用,具體業(yè)務(wù)意義不在這里討論
--------------------------------------請(qǐng)求vo----------------------------------

package open.template.work.commons.vo.udm.request;

import open.template.work.commons.vo.udm.BaseRequestVo;

public class TaskRequestVo extends BaseRequestVo {

    /**
     * 本服務(wù)應(yīng)用名
     */
    private String appName;

    /**
     * 任務(wù)桶id
     */
    private String bucketId;

      。杨箭。寞焙。。
}



--------------------------------------返回vo----------------------------------

package open.template.work.commons.vo.udm.resposne;

import open.template.work.commons.vo.udm.BaseResponseVo;

/**
 * 任務(wù)信息
 */
public class TaskReponseVo extends BaseResponseVo {

    /**
     * 任務(wù)桶id
     */

    private String bucketId;

    /**
     * 任務(wù)id
     */
    private String taskId;

    /**
     * 狀態(tài)
     */
    private String status;
    
      互婿。捣郊。。擒悬。模她。。

}

  1. 服務(wù)端添加新的restapi懂牧,先模擬返回此vo侈净,因?yàn)槿雲(yún)⑹菍?duì)象,所以需要添加@RequestBody 注解

@RestController
public class TaskInfoApi {

    @PostMapping("/task/get")
    public TaskReponseVo popTaskInfo(@RequestBody  TaskRequestVo vo){
        System.out.println("嘗試獲取桶"+vo.getBucketId()+"任務(wù)數(shù)據(jù)");
        TaskReponseVo taskInfoDto = new TaskReponseVo();
        taskInfoDto.setStatus("1");
        taskInfoDto.setTaskId(UUID.randomUUID().toString());
        return taskInfoDto;
    }
}
  1. 客戶端添加feign配置僧凤,

首先添加feign依賴

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

然后添加啟動(dòng)feign注解畜侦,并指定掃描的feign包

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "open.template.work.udm.client.feign")
public class UdmClientApplication {

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


    @Bean
    public IRule ribbonRoundRobinRule() {
        return new RandomRule();
    }


}

添加feign聲明式接口

package open.template.work.udm.client.feign;

import open.template.work.commons.constants.CloudServerDirectory;
import open.template.work.commons.vo.udm.request.TaskRequestVo;
import open.template.work.commons.vo.udm.resposne.TaskReponseVo;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient(name = CloudServerDirectory.UDM_SERVER)
public interface UdmServerTaskFegin {

    @PostMapping("/task/get")
    TaskReponseVo getTaskInfo(@RequestBody TaskRequestVo vo);
}

最后在service層和api層添加對(duì)應(yīng)調(diào)用測(cè)試邏輯,可以看到此時(shí)LoadBalancerClient方式和feign方式是共存的躯保,feign會(huì)自動(dòng)集成eureka和ribbon旋膳,所以此時(shí)的負(fù)載策略就是上章通過(guò)IRule和配置文件指定的負(fù)載規(guī)則,對(duì)于eureia我們通過(guò)@FeignClient(name = CloudServerDirectory.UDM_SERVER)注解在feign已指定途事,不需在拼接url验懊,完美集成擅羞。

package open.template.work.udm.client.service.impl;

import open.template.work.commons.constants.CloudServerDirectory;
import open.template.work.commons.http.RestTemplateFactory;
import open.template.work.commons.vo.udm.request.TaskRequestVo;
import open.template.work.commons.vo.udm.resposne.TaskReponseVo;
import open.template.work.udm.client.feign.UdmServerClient;
import open.template.work.udm.client.feign.UdmServerTaskFegin;
import open.template.work.udm.client.service.UdmServerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;

@Service
public class UdmServerServiceImpl implements UdmServerService {

    @Autowired
    private LoadBalancerClient loadBalancerClient;


    @Autowired
    private UdmServerClient udmServerClient;

    @Autowired
    private UdmServerTaskFegin udmServerTaskClient;


    @Override
    public String checkServerInfo() {
        ServiceInstance instance = loadBalancerClient.choose(CloudServerDirectory.UDM_SERVER);
        return RestTemplateFactory.getTemplate().getForObject(CloudServerDirectory.getServerUrl(instance.getHost(),instance.getPort())+"hello",String.class);
    }

    @Override
    public String checkServer2(){
        return udmServerClient.hello();
    }

    @Override
    public TaskReponseVo getTaskInfo(String bucketId) {
        TaskRequestVo vo=new TaskRequestVo();
        vo.setBucketId(bucketId);
        return udmServerTaskClient.getTaskInfo(vo);
    }
}

  1. 都配了,啟動(dòng)服務(wù)測(cè)試一下
客戶端獲取到的數(shù)據(jù)

服務(wù)端日志:

服務(wù)端日志

完工义图!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末减俏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碱工,更是在濱河造成了極大的恐慌娃承,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怕篷,死亡現(xiàn)場(chǎng)離奇詭異历筝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)廊谓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門梳猪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蹂析,你說(shuō)我怎么就攤上這事舔示。” “怎么了电抚?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵惕稻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蝙叛,道長(zhǎng)俺祠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任借帘,我火速辦了婚禮蜘渣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肺然。我一直安慰自己蔫缸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布际起。 她就那樣靜靜地躺著拾碌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪街望。 梳的紋絲不亂的頭發(fā)上校翔,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音灾前,去河邊找鬼防症。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔫敲。 我是一名探鬼主播饲嗽,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燕偶!你這毒婦竟也來(lái)了喝噪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤指么,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后榴鼎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伯诬,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年巫财,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盗似。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡平项,死狀恐怖赫舒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闽瓢,我是刑警寧澤接癌,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扣讼,受9級(jí)特大地震影響缺猛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椭符,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一荔燎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧销钝,春花似錦有咨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纵装,卻和暖如春征讲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橡娄。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诗箍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挽唉。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓滤祖,卻偏偏與公主長(zhǎng)得像筷狼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匠童,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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