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

相关推荐
先睡6 小时前
Redis的缓存击穿和缓存雪崩
redis·spring·缓存
Bug退退退12310 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
guojl16 小时前
RestTemplate使用手册
spring cloud·微服务
guojl16 小时前
RestTemplate原理分析
spring cloud·微服务
booooooty16 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
极光雨雨16 小时前
Spring Bean 控制销毁顺序的方法总结
java·spring
Ken_111516 小时前
SpringCloud系列(51)--SpringCloud Stream之使用分组解决消息重复消费问题
spring cloud
Spirit_NKlaus16 小时前
解决HttpServletRequest无法获取@RequestBody修饰的参数
java·spring boot·spring
lwb_011817 小时前
SpringCloud——Gateway新一代网关
spring·spring cloud·gateway
lxsy19 小时前
spring-ai-alibaba 1.0.0.2 学习(七)——集成阿里云百炼平台知识库
学习·spring·阿里云·spring-ai·ai-alibaba