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

Spring Cloud Feign的使用案例詳解

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

Feign簡介

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

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

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

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

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

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

使用

與上篇文章ribbon的案例相似,也是客戶端互相訪問、互相幫助

實現(xiàn):兩個商家,一個中介,一個提供商,用戶訪問中介的接口,中介向提供商發(fā)送請求去制作

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

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

order-service-01: 提供商

配置文件配置:

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

啟動類開啟客戶端

@EnableEurekaClient

編寫一個出訂單的controller

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

啟動即可

user-service-02: 中介

關(guān)鍵依賴:

<!--        feign依賴-->
        <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: 你的遠程eureka地址

啟動類開啟服務(wù)

@EnableFeignClients:開啟feign

@EnableDiscoveryClient
@EnableFeignClients

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

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

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

編寫controller實現(xiàn)類

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

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

        return str;
    }
}

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

傳參

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

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

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

order-service控制器編寫方法

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傳遞一個參數(shù)
    @GetMapping("oneParam")
    public String oneParam(@RequestParam String name){
        System.out.println(name);
        return "ok";
    }

    //url傳遞多個參數(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傳參

編寫實體類order

這里用到了lambok實現(xiàn)自動添加有參無參set、get等方法

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

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

    //Post請求傳遞一個對象一個參數(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接口中編寫控制類的傳參方法

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

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

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

    //Post請求傳遞一個對象
    @PostMapping("oneObj")
    public String oneObj(@RequestBody Order order);

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

user-service控制器中編寫方法調(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";

    }

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

拓展

feign的默認等待時間是1s,超過1s就直接報錯超時

配置超時、連接時間

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

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

日志打印

編寫日志功能有利于錯誤排查

日志級別

NONE:默認的,不顯示任何日志;

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

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

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

在啟動類application中編寫

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

配置文件中yml開啟日志客戶端

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

level下是feign接口的路徑

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

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

相關(guān)文章

  • java反射獲取和調(diào)用方法

    java反射獲取和調(diào)用方法

    本篇內(nèi)容主要給大家詳細講解了java反射獲取方法以及調(diào)用方法,需要的朋友參考學習一下吧。
    2017-12-12
  • 詳解Springboot事務(wù)管理

    詳解Springboot事務(wù)管理

    本篇文章主要介紹了詳解Springboot事務(wù)管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Mybatis中強大的resultMap功能介紹

    Mybatis中強大的resultMap功能介紹

    這篇文章主要給大家介紹了關(guān)于Mybatis中強大的resultMap功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • 為什么阿里要慎重使用ArrayList中的subList方法

    為什么阿里要慎重使用ArrayList中的subList方法

    這篇文章主要介紹了為什么要慎重使用ArrayList中的subList方法,subList是List接口中定義的一個方法,該方法主要用于返回一個集合中的一段、可以理解為截取一個集合中的部分元素,他的返回值也是一個List。,需要的朋友可以參考下
    2019-06-06
  • Mybatis獲取參數(shù)值和查詢功能的案例詳解

    Mybatis獲取參數(shù)值和查詢功能的案例詳解

    這篇文章主要介紹了Mybatis獲取參數(shù)值和查詢功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • JAVA中List.addAll的基本語法與用法詳解

    JAVA中List.addAll的基本語法與用法詳解

    這篇文章主要給大家介紹了關(guān)于JAVA中List.addAll的基本語法與用法的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • Java靜態(tài)內(nèi)部類實現(xiàn)單例過程

    Java靜態(tài)內(nèi)部類實現(xiàn)單例過程

    這篇文章主要介紹了Java靜態(tài)內(nèi)部類實現(xiàn)單例過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Flowable流程引擎API與服務(wù)

    Flowable流程引擎API與服務(wù)

    這篇文章主要介紹了Flowable流程引擎API與服務(wù),引擎API是與Flowable交互的最常用手段,總?cè)肟邳c是ProcessEngine,使用ProcessEngine,可以獲得各種提供工作流或BPM方法的服務(wù),下面我們來詳細了解
    2023-10-10
  • IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines)

    IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines

    這篇文章主要介紹了IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • JAVAE中servlet的概念及使用示例詳解

    JAVAE中servlet的概念及使用示例詳解

    servlet是一種實現(xiàn)動態(tài)頁面的技術(shù),他是由tomcat提供給程序員的一組API可以幫助程序員開發(fā)一個web程序,這篇文章主要介紹了JAVAE中servlet的概念及使用,需要的朋友可以參考下
    2024-05-05

最新評論

和硕县| 黎川县| 若羌县| 阳春市| 贵定县| 寻乌县| 瓮安县| 商洛市| 呼玛县| 云南省| 囊谦县| 玉树县| 云林县| 类乌齐县| 定南县| 冷水江市| 长治市| 昭苏县| 古浪县| 集安市| 荣昌县| 平湖市| 福安市| 玉屏| 洛川县| 定兴县| 保康县| 河曲县| 奉新县| 临泉县| 泰兴市| 桐乡市| 青铜峡市| 泽普县| 探索| 兴安盟| 上饶县| 日照市| 阳泉市| 富平县| 绥棱县|