• 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
    ...
    

  • 相关阅读:
    OSX: 私人定制Dock默认程序图标
    PHP+MYSQL分页原理
    Python 数据结构与算法 —— 哈弗曼树
    C#制作文本转换为声音的demo,保存音频文件到本地
    时区与时间(二)
    时区与时间(二)
    摄影的艺术
    摄影的艺术
    名词、文化概念的解释
    名词、文化概念的解释
  • 原文地址:https://www.cnblogs.com/jinit/p/13417381.html
Copyright © 2020-2023  润新知