zoukankan      html  css  js  c++  java
  • springcloud之Feign伪装

    Feign:可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

    Feign是Netflix开发的声明式/模板化的HTTP客户端。

    Feign的使用

    1.在consumer的pom文件中导入依赖

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

    2.在启动类开启Feign功能

    @SpringCloudApplication
    @EnableFeignClients // 开启feign客户端
    public class ItestConsumerApplication {
        
        public static void main(String[] args) {
            SpringApplication.run(ItestConsumerApplication.class, args);
        }
    }

    可以删除 RestTemplate:feign已经自动集成了Ribbon负载均衡的RestTemplate。所以,此处不需要再注册RestTemplate。

     3.在consumer工程中,添加UserClient接口:

    @FeignClient(value = "test-provider") // 标注该类是一个feign接口
    public interface UserClient {
    
        @GetMapping("user/{id}")
        User queryById(@PathVariable("id") Long id);
    }
    • 首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟mybatis的mapper很像

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

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

    改造原来的调用逻辑,调用UserClient接口:

    @Controller
    @RequestMapping("consumer/user")
    public class UserController {
    
        @Autowired
        private UserClient userClient;
    
        @GetMapping
        @ResponseBody
        public User queryUserById(@RequestParam("id") Long id){
            User user = this.userClient.queryUserById(id);
            return user;
        }
    
    }

    负载均衡

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

    Feign也有对Hystrix的集成,默认情况下是关闭的,

    通过下面的参数来开启:

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

    1)要定义一个类UserClientFallback,实现刚才编写的UserClient,作为fallback的处理类,

    @Component
    public class UserClientFallback implements UserClient {
    
        @Override
        public User queryById(Long id) {
            User user = new User();
            user.setUserName("服务器繁忙,请稍后再试!");
            return user;
        }
    }

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

    @FeignClient(value = "test-provider", fallback = UserClientFallback.class) // 标注该类是一个feign接口
    public interface UserClient {
    
        @GetMapping("user/{id}")
        User queryUserById(@PathVariable("id") Long id);
    }
  • 相关阅读:
    preprocess
    数组
    共用体
    动态内存管理函数
    C链表
    文件的定位与出错检查
    字符串读写函数
    C文件操作
    位运算
    爱好-超级IP:超级IP
  • 原文地址:https://www.cnblogs.com/zxh06820/p/12907700.html
Copyright © 2011-2022 走看看