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

相关推荐
r***934810 小时前
【Redis】在Java中以及Spring环境下操作Redis
java·redis·spring
3***688410 小时前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback
k***459910 小时前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
xml·spring·mybatis
q***448110 小时前
spring实例化对象的几种方式(使用XML配置文件)
xml·java·spring
q***420511 小时前
Spring Data 什么是Spring Data 理解
java·后端·spring
小坏讲微服务12 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
Swift社区15 小时前
StackOverflowError 栈溢出的原因与实战解决方案
java·spring boot·spring
这是程序猿1 天前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9191 天前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring