亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Cloud Feign的使用案例詳解

 更新時(shí)間:2023年02月09日 10:46:56   作者:碰磕  
Feign是Netflix開(kāi)發(fā)的?個(gè)輕量級(jí)RESTful的HTTP服務(wù)客戶(hù)端(?它來(lái)發(fā)起請(qǐng)求,遠(yuǎn)程調(diào)?的),是以Java接?注解的?式調(diào)?Http請(qǐng)求,F(xiàn)eign被?泛應(yīng)?在Spring Cloud 的解決?案中,本文給大家介紹Spring Cloud Feign的使用,感興趣的朋友一起看看吧

Feign簡(jiǎn)介

Feign是Netflix開(kāi)發(fā)的?個(gè)輕量級(jí)RESTful的HTTP服務(wù)客戶(hù)端(?它來(lái)發(fā)起請(qǐng)求,遠(yuǎn)程調(diào)?的),是以Java接?注解的?式調(diào)?Http請(qǐng)求,?不?像Java中通過(guò)封裝HTTP請(qǐng)求報(bào)?的?式直接調(diào)?,F(xiàn)eign被?泛應(yīng)?在Spring Cloud 的解決?案中。類(lèi)似于Dubbo,服務(wù)消費(fèi)者拿到服務(wù)提供者的接?,然后像調(diào)?本地接??法?樣去調(diào)?,實(shí)際發(fā)出的是遠(yuǎn)程的請(qǐng)求。

Feign可幫助我們更加便捷,優(yōu)雅的調(diào)?HTTP API:不需要我們?nèi)テ唇觰rl然后調(diào)?restTemplate的api,在SpringCloud中,使?Feign?常簡(jiǎn)單,創(chuàng)建?個(gè)接?(在消費(fèi)者–服務(wù)調(diào)??這?端),并在接?上添加?些注解,代碼就完成了。

SpringCloud對(duì)Feign進(jìn)?了增強(qiáng),使Feign?持了SpringMVC注解(OpenFeign),本質(zhì):封裝了Http調(diào)?流程,更符合?向接?化的編程習(xí)慣,類(lèi)似于Dubbo的服務(wù)調(diào)?,Dubbo的調(diào)??式其實(shí)就是很好的?向接?編程。

??它是聲明性(注解)web服務(wù)客戶(hù)端

要使用Feign,需創(chuàng)建一個(gè)接口并對(duì)其進(jìn)行注解它是一個(gè)遠(yuǎn)程調(diào)用的組件(接口,注解)http調(diào)用的

??Feign集成了ribbon ribbon里集成了eureka

使用

與上篇文章ribbon的案例相似,也是客戶(hù)端互相訪問(wèn)、互相幫助

實(shí)現(xiàn):兩個(gè)商家,一個(gè)中介,一個(gè)提供商,用戶(hù)訪問(wèn)中介的接口,中介向提供商發(fā)送請(qǐng)求去制作

同樣是創(chuàng)建兩個(gè)client,之前創(chuàng)過(guò)就不走流程了

我這里創(chuàng)建了一個(gè)order-service-01和一個(gè)user-service-02

order-service-01: 提供商

配置文件配置:

server:
  port: 8080
spring:
  application:
    name: order-service
eureka:
  client:
    service-url:
      defaultZone: 你的遠(yuǎn)程eureka地址

啟動(dòng)類(lèi)開(kāi)啟客戶(hù)端

@EnableEurekaClient

編寫(xiě)一個(gè)出訂單的controller

@RestController
public class OrderControll {
    @GetMapping("doOrder")
    public String doOrder(){
        return "正在制作面條";
    }
}

啟動(dòng)即可

user-service-02: 中介

關(guān)鍵依賴(lài):

<!--        feign依賴(lài)-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

配置文件application.yml:

server:
  port: 8081
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: 你的遠(yuǎn)程eureka地址

啟動(dòng)類(lèi)開(kāi)啟服務(wù)

@EnableFeignClients:開(kāi)啟feign

@EnableDiscoveryClient
@EnableFeignClients

關(guān)鍵:創(chuàng)建接口類(lèi)UserOrderfeign

需要調(diào)用提供商(order-service)的doOrder的接口即向下方代碼編寫(xiě)即可

/**
 * 下方注解:
 * value就是提供者的應(yīng)用名稱(chēng)
 */
@FeignClient(value="order-service")
public interface UserOrderfeign {
    /**
     * 你需要調(diào)用哪個(gè)controller就寫(xiě)它的方法簽名
     * @return
     */
    @GetMapping("doOrder")
    String doOrder();
}

編寫(xiě)controller實(shí)現(xiàn)類(lèi)

直接引入編寫(xiě)的userOrderfeign即可直接調(diào)用提供商的接口

@RestController
public class UserControll {
    @Autowired
    public UserOrderfeign userOrderfeign;
    @GetMapping("userDoOrder")
    public String userDoOrder(){
        System.out.println("來(lái)客人了...");
        //發(fā)起遠(yuǎn)程調(diào)用
        String str=userOrderfeign.doOrder();

        return str;
    }
}

運(yùn)行最終訪問(wèn)localhost:8081/userDoOrder頁(yè)面就會(huì)顯示提供商返回的內(nèi)容了~

傳參

需確保參數(shù)列表一致,返回值一致,方法簽名一致

  • URL傳參:參數(shù)列表使用@PathVariable
  • GET傳參:參數(shù)列表使用@RequestParam
  • POST傳參:參數(shù)列表使用@RequestParam或者Requestbody

基于上方案例繼續(xù)使用

order-service控制器編寫(xiě)方法

URL拼接傳參

//url拼接傳參
    @GetMapping("testUrl/{name}/and/{age}")
    public String testUrl(@PathVariable("name")String name,@PathVariable("age")Integer age){
        System.out.println(name+":"+age);
        return "ok";
    }

GET傳參

 //url傳遞一個(gè)參數(shù)
    @GetMapping("oneParam")
    public String oneParam(@RequestParam String name){
        System.out.println(name);
        return "ok";
    }

    //url傳遞多個(gè)參數(shù)
    @GetMapping("twoParam")
    public String twoParam(@RequestParam(required = false) String name,@RequestParam(required = false)Integer age){
        System.out.println(name);
        System.out.println(age);
        return "ok";
    }

POST傳參

編寫(xiě)實(shí)體類(lèi)order

這里用到了lambok實(shí)現(xiàn)自動(dòng)添加有參無(wú)參set、get等方法

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Order {

    private Integer id;
    private String name;
    private Double price;
    private Date time;
}
//Post請(qǐng)求傳遞一個(gè)對(duì)象
    @PostMapping("oneObj")
    public String oneObj(@RequestBody Order order){
        System.out.println(order);
        return "ok";
    }

    //Post請(qǐng)求傳遞一個(gè)對(duì)象一個(gè)參數(shù)
    @PostMapping("oneObjOneParam")
    public String oneObjOneParam(@RequestBody Order order,@RequestParam("name")String name){
        System.out.println(order);
        System.out.println(name);
        return "ok";
    }

調(diào)用

user-service的feign接口中編寫(xiě)控制類(lèi)的傳參方法

/url拼接傳參
    @GetMapping("testUrl/{name}/and/{age}")
    public String testUrl(@PathVariable("name")String name, @PathVariable("age")Integer age);

    //url傳遞一個(gè)參數(shù)
    @GetMapping("oneParam")
    public String oneParam(@RequestParam String name);

    //url傳遞多個(gè)參數(shù)
    @GetMapping("twoParam")
    public String twoParam(@RequestParam(required = false) String name,@RequestParam(required = false)Integer age);

    //Post請(qǐng)求傳遞一個(gè)對(duì)象
    @PostMapping("oneObj")
    public String oneObj(@RequestBody Order order);

    //Post請(qǐng)求傳遞一個(gè)對(duì)象一個(gè)參數(shù)
    @PostMapping("oneObjOneParam")
    public String oneObjOneParam(@RequestBody Order order,@RequestParam("name")String name);

user-service控制器中編寫(xiě)方法調(diào)用

 @GetMapping("testParam")
    public String testParam(){
        String zt = userOrderFeign.testUrl("zt", 21);
        System.out.println(zt);

        String xzl = userOrderFeign.oneParam("xzl");
        System.out.println(xzl);

        String wf = userOrderFeign.twoParam("wf", 22);
        System.out.println(wf);

        Order order= Order.builder()
                     .name("牛排")
                     .price(188D)
                     .time(new Date())
                     .id(1)
                     .build();
        String s = userOrderFeign.oneObj(order);
        System.out.println(s);

        String param = userOrderFeign.oneObjOneParam(order, "dqf");
        System.out.println(param);

        return "ok";

    }

以上即可實(shí)現(xiàn)傳參~

拓展

feign的默認(rèn)等待時(shí)間是1s,超過(guò)1s就直接報(bào)錯(cuò)超時(shí)

配置超時(shí)、連接時(shí)間

Tip:feign只是封裝了遠(yuǎn)程調(diào)用的功能 底層還是ribbon 所以需要修改ribbon的時(shí)間

#feign只是封裝了遠(yuǎn)程調(diào)用的功能  底層還是ribbon 所以需要修改ribbon的時(shí)間
ribbon:
  ReadTimeout: 3000 #3s超時(shí)時(shí)間
  ConnectTimeout: 3000 #連接服務(wù)的超時(shí)時(shí)間

日志打印

編寫(xiě)日志功能有利于錯(cuò)誤排查

日志級(jí)別

NONE:默認(rèn)的,不顯示任何日志;

BASIC:僅記錄請(qǐng)求方法、URL、響應(yīng)狀態(tài)碼及執(zhí)行時(shí)間;

HEACIERS:除了BASIC中定義的信息之外,還有請(qǐng)求和響應(yīng)的頭信息

FULL:除了HEADERS中定義的信息之外,還有請(qǐng)求和響應(yīng)的正文及元數(shù)據(jù)。

在啟動(dòng)類(lèi)application中編寫(xiě)

/**
     * 打印日志信息
     */
    @Bean
    public Logger.Level level(){
        return Logger.Level.FULL;
    }

配置文件中yml開(kāi)啟日志客戶(hù)端

logging:
  level:
    com.pengke.userservice02.feign.UserOrderfeign: debug # 需要打印請(qǐng)求該接口的日志...

level下是feign接口的路徑

這樣即可實(shí)現(xiàn)用戶(hù)訪問(wèn)該接口實(shí)現(xiàn)對(duì)應(yīng)的日志打印相關(guān)信息

到此這篇關(guān)于Spring Cloud Feign的使用的文章就介紹到這了,更多相關(guān)Spring Cloud Feign的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目沒(méi)有把依賴(lài)的jar包一起打包的問(wèn)題解決

    SpringBoot項(xiàng)目沒(méi)有把依賴(lài)的jar包一起打包的問(wèn)題解決

    這篇文章主要介紹了SpringBoot項(xiàng)目沒(méi)有把依賴(lài)的jar包一起打包的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Spring多對(duì)象引入方法

    Spring多對(duì)象引入方法

    今天小編就為大家分享一篇關(guān)于Spring多對(duì)象引入方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Spring?WebMVC初始化Controller流程詳解

    Spring?WebMVC初始化Controller流程詳解

    這篇文章主要介紹了Spring?WebMVC初始化Controller流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作

    java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作

    這篇文章主要介紹了java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java讀取圖片EXIF信息的方法

    Java讀取圖片EXIF信息的方法

    這篇文章主要介紹了Java讀取圖片EXIF信息的方法,較為詳細(xì)的分析了圖片EXIF信息的概念、功能及java讀取EXIF信息的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • Spring中@Conditional注解用法詳解

    Spring中@Conditional注解用法詳解

    這篇文章主要介紹了Spring中@Conditional注解用法詳解,@Conditional是Spring4版本新提供的一種注解,它的作用是按照設(shè)定的條件進(jìn)行判斷,把滿(mǎn)足判斷條件的bean注冊(cè)到Spring容器,需要的朋友可以參考下
    2023-11-11
  • springboot 運(yùn)行 jar 包讀取外部配置文件的問(wèn)題

    springboot 運(yùn)行 jar 包讀取外部配置文件的問(wèn)題

    這篇文章主要介紹了springboot 運(yùn)行 jar 包讀取外部配置文件,本文主要描述linux系統(tǒng)執(zhí)行jar包讀取jar包同級(jí)目錄的外部配置文件,主要分為兩種方法,每種方法通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • SpringBoot實(shí)現(xiàn)設(shè)置全局和局部時(shí)間格式化

    SpringBoot實(shí)現(xiàn)設(shè)置全局和局部時(shí)間格式化

    本文主要介紹了SpringBoot實(shí)現(xiàn)設(shè)置全局和局部時(shí)間格式化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 淺析java中String類(lèi)型中“==”與“equal”的區(qū)別

    淺析java中String類(lèi)型中“==”與“equal”的區(qū)別

    這篇文章主要介紹了淺析java中String類(lèi)型中“==”與“equal”的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • javaweb實(shí)現(xiàn)文件上傳功能

    javaweb實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了javaweb實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論