• SpringCloud之Feign集成Ribbon


    Feign定义【可跳过】

    Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为“假装,伪装,变形”,是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。

    Feign

    属于接口编程调用。可以对比Rest方式来实现负载均衡=>这里!!!
    修改普通的消费者,变成使用feign的消费者客户端

    在这里插入图片描述

    1、导入依赖

        <dependencies>
            
            <dependency>
                <groupId>com.jylgroupId>
                <artifactId>springcloud-apiartifactId>
                <version>1.0-SNAPSHOTversion>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-devtoolsartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-ribbonartifactId>
                <version>1.4.6.RELEASEversion>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-eurekaartifactId>
                <version>1.4.6.RELEASEversion>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-feignartifactId>
                <version>1.4.6.RELEASEversion>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2、创建服务层接口

    在服务层接口上添加@FeignClient注解 name= “对应eureka服务界面Application的值”
    注意:这里的映射路径要对应提供者控制层提供的访问路径

    @FeignClient(name = "SPRINGCLOUD-PROVIDER-DEPT")
    public interface DeptClientService {
    
        @GetMapping("/dept/get/{id}")
        public Dept get(@PathVariable("id") Long id);
    
        @GetMapping("/dept/list")
        public List<Dept> getAll();
    
        @PostMapping("/dept/add")
        public boolean add(Dept dept);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3、客户端配置文件类

    返回的是负载均衡规则,此规则也可以自定义,自定义类需要实现IRule接口

    @Configuration  
    public class ConfigBean{  
        @Bean  
        public IRule randomRule() {  
            return return new RandomRule(); // 随机
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4、feign实现客户端的控制层

    直接自动注入服务层接口,就可以访问到提供者。

    @RestController
    public class DeptConsumerController {
       @Autowired
       private DeptClientService clientService;
       @GetMapping("/consumer/dept/get/{id}")
       public Dept get(@PathVariable("id") Long id){
            return clientService.get(id);
       }
    
       @GetMapping("/consumer/dept/list")
       public List<Dept> getAll(){
           return clientService.getAll();
       }
    
       @PostMapping("/consumer/dept/add")
       public boolean add(Dept dept){
           return clientService.add(dept);
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5、feign客户端启动类

    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients(basePackages = {"com.jyl.springcloud"}) // 扫描到springcloud-api中的sercie包下的DeptClientService接口
    public class DeptConsumer_Feign_80 {
        public static void main(String[] args) {
           SpringApplication.run(DeptConsumer_Feign_80.class,args);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    6、测试结果

    启动3个eureka服务、3个提供者和一个feign消费者

    在这里插入图片描述

    启动类

    访问 http://localhost/consumer/dept/list,测试负载均衡,默认是轮询方式。

    在这里插入图片描述

    获取dept的所有消息

  • 相关阅读:
    [iOS]-UIKit
    多机器人仓储巡逻路径规划问题的A*算法实现(附带MATLAB代码)
    如何选择合适的香港物理服务器?
    Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect
    投研报告 -用DEX技术链改投注网站的项目Betswap($BSGG)
    主流商业智能(BI)工具的比较(二):Power BI与Domo
    EasyExcel单元格数据超过32767报错问题处理
    性能测试流程注意事项(亲身经历希望能帮助到你)
    python 提取红楼梦第一章得到五言律诗和七言律诗(正则表达式)
    Feign(替代RestTemplate)远程调用
  • 原文地址:https://blog.csdn.net/weixin_46171048/article/details/138194341