SpringCloud之Feign集成Ribbon

Feign定义【可跳过】

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

Feign

属于接口编程调用。可以对比Rest方式来实现负载均衡=>这里!!!

修改普通的消费者,变成使用feign的消费者客户端

1、导入依赖

xml 复制代码
    <dependencies>
        <!--        实体类 + Web-->
        <dependency>
            <groupId>com.jyl</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--        热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!-- ribbon  & eureka       -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!-- eureka       -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!-- feign       -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
    </dependencies>

2、创建服务层接口

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

java 复制代码
@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);
}

3、客户端配置文件类

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

java 复制代码
@Configuration  
public class ConfigBean{  
    @Bean  
    public IRule randomRule() {  
        return return new RandomRule(); // 随机
    }  
}

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

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

java 复制代码
@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);
   }
}

5、feign客户端启动类

java 复制代码
@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);
    }
}

6、测试结果

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


启动类

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


获取dept的所有消息

相关推荐
BUG指挥官15 小时前
Sa-Token和Spring Security对比
java·后端·spring
geminigoth15 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring
xbgRS18 小时前
spring整合mybaits
java·spring·mybatis
ruleslol18 小时前
静态依赖注入 VS 动态依赖查询
spring
墨雨晨曦8821 小时前
Spring AI总结
java·人工智能·spring
用户3126874877201 天前
Spring Boot 异常处理到底怎么玩的?从 DispatcherServlet 到全局兜底的全链路拆解
spring
不才不才不不才1 天前
Spring 源码系列(17): HandlerMapping 与 HandlerAdapter 两大体系
java·后端·spring
(轻舟已过万重山)1 天前
第40章 Spring AI 实战:企业级 AI 应用架构
人工智能·spring·架构
过客随尘2 天前
网关扩容了,流量却还是打不过去?企业级 Spring Cloud Gateway 生产动态化部署实战
spring cloud·微服务·架构
堕落年代2 天前
Ollama CPU 推理大提示词优化实测报告(细致化数据版)
java·后端·spring