更新时间:2021-09-29 08:44:28 来源:极悦 浏览1460次
Feign 旨在使编写 Java Http 客户端更容易。在使用Ribbon+RestTemplate时,我们使用RestTemplate对http请求进行封装,形成一组模板化的调用方法。但是在实际开发中,由于依赖服务的调用可能不止一个,而且一个接口往往会在多个地方被调用,所以通常每个微服务都会封装一些客户端类来封装这些依赖的服务调用。所以Feign在这个基础上做了进一步的封装,他会帮我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口,并使用注解进行配置即可(之前Dao接口用Mapper注解标注,现在是微服务接口,标注了Feign注解),和服务提供者的接口绑定,简化了使用Spring cloud Ribbon时自动封装服务调用客户端的开发量。Feign集成了Ribbon,使用Ribbon维护MicroServiceCloud-Dept的服务列表信息,通过轮询实现客户端负载均衡。与 Ribbon 不同的是,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教程,里面的内容更加详细,希望对大家能够有所帮。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习