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);
    }
  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/zxh06820/p/12907700.html
Copyright © 2011-2022 走看看