zoukankan      html  css  js  c++  java
  • SpringCloud OpenFeign

    OpenFeign

           OpenFeign 是对feign、RestTemplate、Ribbon进行封装的用于代替feign的客户端服务接口调用工具,支持SpringMVC标注注解和HttpMessageConverters,可以与Eureka和Ribbon组合使用以支持负载均衡。Opnefeign的使用非常简单,只需要引入相依依赖,定义service接口绑定目标服务提供的接口即可。

    OpenFeign的使用

    pom.xml

    ...
    <!-- OpenFeign 服务调用-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    ...
    

    AdminApp.java

    /**
     * @author :jty
     * @date :20-7-28
     * @description : @EnableFeignClients 开启feign服务调用,默认轮询负载均衡
     */
    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class AdminApp {
        public static void main(String[] args) {
            SpringApplication.run(AdminApp.class);
        }
    }
    

    定义一个feign 用户服务调用接口,来绑定用户服务的UserController请求

    UserFeignService.java

    /**
     * @author :jty
     * @date :20-8-1
     * @description : feign 服务调用接口,@FeignClient(value = "user-server")  value 为目标服务名
     * 方法需要与UserController定义请求方法一致,即UserController请求接口方法中有的SpringMVC注解,本接口一定要有。
     */
    @Component
    @FeignClient(value = "user-server",fallback =UserFeignServiceImpl.class)
    public interface UserFeignService {
        /**
         * 根据用户id查询用户
         * @param userId
         * @return Result
         */
        @GetMapping(value = "/get/user/{userId}", produces = "application/json;charset=utf-8")
        Result searchUser(@PathVariable(value = "userId") int userId);
    
        /**
         * 新增用户
         * @param user
         * @return Result
         */
        @PostMapping(value = "/post/create/user", produces = "application/json;charset=utf-8")
        Result createUser(@RequestBody User user);
    }
    

    AdminController.java

    /**
     * @author :jty
     * @date :20-7-28
     * @description : 管理员模块
     */
    @RestController
    public class AdminController {
        @Autowired
        UserFeignService userFeignService;
    
        /**
         * RestTemplate forObject
         */
        @GetMapping(value = "/admin/get/user/{userId}", produces = "application/json;charset=utf-8")
        public Result searchUser(@PathVariable int userId) {
            Result result = userFeignService.searchUser(userId);
            return result;
        }
    
        @GetMapping(value = "/admin/post/create/user", produces = "application/json;charset=utf-8")
        public Result createUser(@RequestBody User user) {
            Result result = userFeignService.createUser(user);
            return result;
        }
    }
    

    OpenFeign 服务调用超时处理

    OpenFeign 默认1秒获取不到请求返回结果,则请求超时,在某些场景下需要更改请求超时时间时,须在application.yml中配置

    application.yml

    #OpenFeign 默认支持Ribbon
    ribbon:
      #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ReadTimeout: 5000
      #指的是连接后从服务器读取到可用资源所用的时间(默认是1秒)
      ConnectTimeout: 5000
    
    OpenFeign 日志打印

           OpenFeign提供有日志打印功能,以及不同的日志级别。在开发时跟根据需要调整日志级别来查看请求信息
    FeignLogConfig.java

    /**
     * @author :jty
     * @date :20-8-2
     * @description : 配置feign 日志级别
     */
    @Configuration
    public class FeignLogConfig {
        /**
         * #日志级别
         * #NONE:默认的,不显示任何日志;
         * #BASIC:仅记录请求方法、URL、响应状态码及执行时间;
         * #HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
         * #FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
         */
        @Bean
        public Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL;
        }
    }
    

    application.yml

    ...
    #某个类的日志级别
    logging:
      level:
        #feign 日志以什么级别监控哪个接口
        com.module.admin.service.UserFeignService: debug
    ...
    

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/jinit/p/13417381.html
Copyright © 2011-2022 走看看