专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 SpringCloud项目实战:Feign负载均衡

SpringCloud项目实战:Feign负载均衡

更新时间:2021-09-29 08:44:28 来源:动力节点 浏览1345次

Feign可以做什么

Feign 旨在使编写 Java Http 客户端更容易。在使用Ribbon+RestTemplate时,我们使用RestTemplate对http请求进行封装,形成一组模板化的调用方法。但是在实际开发中,由于依赖服务的调用可能不止一个,而且一个接口往往会在多个地方被调用,所以通常每个微服务都会封装一些客户端类来封装这些依赖的服务调用。所以Feign在这个基础上做了进一步的封装,他会帮我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口,并使用注解进行配置即可(之前Dao接口用Mapper注解标注,现在是微服务接口,标注了Feign注解),和服务提供者的接口绑定,简化了使用Spring cloud Ribbon时自动封装服务调用客户端的开发量。Feign集成了Ribbon,使用Ribbon维护MicroServiceCloud-Dept的服务列表信息,通过轮询实现客户端负载均衡。与 Ribbon 不同的是,feign 只需要定义服务绑定接口,并使用声明式方法来优雅简单地实现服务调用。

Feign 步骤

1.参考80个微服务搭建microservicecloud-consumer-dept-feign

(1) 与80相比,pom.xml文件增加了feign的依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
</dependency> 

(2)application.yml复制80

(3)新建一个主启动类DeptConsumer80_Feign_App.java,并添加如下注解

package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages= {"com.atguigu.springcloud"})
@ComponentScan("com.atguigu.springcloud")
public class DeptConsumer80_Feign_App
{
  public static void main(String[] args)
  {
   SpringApplication.run(DeptConsumer80_Feign_App.class, args);
  }
}

2.修改微服务microservicecloud-api

(1)在pom.xml文件中添加feign依赖

<依赖>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
</依赖>

(2)新增接口DeptClientService.java

package com.atguigu.springcloud.service;
import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.atguigu.springcloud.entities.Dept;
@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface DeptClientService {
    @RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
    public Dept get(@PathVariable("id") long id);     
    @RequestMapping(value = "/dept/list",method = RequestMethod.GET)
    public List<Dept> list();     
    @RequestMapping(value = "/dept/add",method = RequestMethod.POST)
    public boolean add(Dept dept);
}

(3)执行clean install构建jar包

3.微服务microservicecloud-consumer-dept-feign新建一个DeptController_Feign.java

package com.atguigu.springcloud.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptClientService;
@RestController
public class DeptController_Feign
{
  @Autowired
  private DeptClientService service = null;
  @RequestMapping(value = "/consumer/dept/get/{id}")
  public Dept get(@PathVariable("id") Long id)
  {
   return this.service.get(id);
  }
  @RequestMapping(value = "/consumer/dept/list")
  public List<Dept> list()
  {
   return this.service.list();
  }
  @RequestMapping(value = "/consumer/dept/add")
  public Object add(Dept dept)
  {
   return this.service.add(dept);
  }
}

4.启动eureka,3个微服务实例,启动Feign,输入http://localhost/consumer/dept/list,测试成功

Feign通过接口方法调用Rest服务(以前是Ribbon+RestTemplate),将请求发送到Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list),通过Feign直接找到服务接口,因为当服务被称为 Incorporating Ribbon 技术时,它也支持负载均衡。

大家想了解更多相关知识,可以关注一下动力节点的SpringCloud教程,里面的内容更加详细,希望对大家能够有所帮。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>