• Feign


    一、什么是Feign?  Feign可以做什么

    Feign 可以将Rest 的请求隐藏,伪装成SpringMvc的Controller一样,你不用自己去拼接url,参数等操作,

    一切都交给Feign去处理

    Spring Cloud对Feign 进行了增强,使Feign支持了SpringMvc的注解,并且整合了Ribbon和Eureka,从而

    让Feign的使用更加方便

    二、Feign 快速入门

    1、引入依赖

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

    2、Feign 客户端

    @FeignClient("user-service")
    public interface UserFeignClient {
    
        @GetMapping("/user/{id}")
        User queryUserById(@PathVariable("id") Long id);
    }

    首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟mybatis的mapper很像

    @FeignClient,声明这是一个Feign客户端,类似@Mapper注解。同时通过value属性指定服务名称

    接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果

    改造原来的调用逻辑,不在调用UserDao

    @Service
    public class UserService {
    
        @Autowired
        private UserFeignClient userFeignClient;
    
        public List<User> queryUserByIds(List<Long> ids) {
            List<User> users = new ArrayList<>();
            ids.forEach(id -> {
                // 我们测试多次查询,
                users.add(this.userFeignClient.queryUserById(id));
            });
            return users;
        }
    }

    3、开启Feign 功能

    在启动类上,添加注解,开启Feign功能

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableHystrix
    @EnableFeignClients // 开启Feign功能
    public class UserConsumerDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserConsumerDemoApplication.class, args);
        }
    }

    =================================================================

    Feign中本身已经集成了Ribbon依赖和自动配置:

    Ribbon 配置

    user-service:
      ribbon:
        ConnectTimeout: 250 # 连接超时时间(ms)
        ReadTimeout: 1000 # 通信超时时间(ms)
        OkToRetryOnAllOperations: true # 是否对所有操作重试
        MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
        MaxAutoRetries: 1 # 同一实例的重试次数

    Hystrix :

    Feign默认情况下没有开启熔断,需要通过以下参数来开启熔断

    feign:
      hystrix:
        enabled: true # 开启Feign的熔断功能

    feign 熔断后,回调函数的编写

    1)首先要编写一个类,实现刚才的 UserFeignClient 接口 ,作为fallback的处理类

    @Component
    public class UserFeignClientFallback implements UserFeignClient {
        @Override
        public User queryUserById(Long id) {
            User user = new User();
            user.setId(id);
            user.setName("用户查询出现异常!");
            return user;
        }
    }

    2)然后在UserFeignClient中,指定刚才编写的实现类

    @FeignClient(value = "user-service", fallback = UserFeignClientFallback.class)
    public interface UserFeignClient {
    
        @GetMapping("/user/{id}")
        User queryUserById(@PathVariable("id") Long id);
    }

    3)测试

  • 相关阅读:
    PHP的反射机制
    mysqlbinlog
    PHP调用java的class
    ecshop session机制
    memory_limit session.cache_expire ecshop初始化注释说明
    ecshop运行超过30秒超时的限制解决办法
    如果你想拥有事业,而非仅仅是工作
    扎克伯格谈”人际交往”趋势
    Magento架构分析,Magento MVC 设计分析
    推荐的PHP编码规范
  • 原文地址:https://www.cnblogs.com/houchen/p/12063793.html
Copyright © 2020-2023  润新知