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的所有消息

相关推荐
一枕槐安4871 天前
RAG 服务扛住高并发:缓存、队列、限流三件套
java·spring·缓存·异步任务·rag·断路器
YDS8291 天前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
雷一言说1 天前
Spring AI 2.0 Modular RAG:接入 Rerank 重排模型
spring
学到老活到老1 天前
第 22 集:Filter、Interceptor、AOP 都能拦截,为什么不能互换?
java·后端·spring
郭小李1 天前
spring 中的 @EnableWebMvc注解和WebMvcConfigurer接口
java·后端·spring
CoderYanger1 天前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
霸道流氓气质1 天前
AI 翻译插件:翻译记忆级联复用、术语混合检索与结构化质量门禁的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
霸道流氓气质1 天前
智能表单生成器:结构化输出契约、JSON Schema 驱动渲染与 EAV/JSONB 混合存储的 Vue3 + Spring AI 生产级实战
人工智能·spring·json
java_nnnn1 天前
spring web mvc图书管理小案例
前端·spring·mvc
步行cgn2 天前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc