一、Feign简介

来自狂神与

Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供负载均衡的http客户端

只需要创建一个接口,然后添加注解即可~

Feign,主要是社区版,大家都习惯面向接口编程。这个是很多开发人员的规范。调用微服务访问两种方法

微服务名字 【ribbon】
接口和注解 【feign】
Feign能干什么?

Feign旨在使编写Java Http客户端变得更容易
前面在使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一个客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它 (类似以前Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon 时,自动封装服务调用客户端的开发量。
Feign默认集成了Ribbon

利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

更改model模块

feign负载均衡寻址过程 feign负载均衡配置_客户端


添加实体类

feign负载均衡寻址过程 feign负载均衡配置_feign负载均衡寻址过程_02

然后再创建一个服务消费者80

feign负载均衡寻址过程 feign负载均衡配置_微服务_03


yml和之前的80一致

server:

port: 80

eureka:
client:
fetch-registry: true
register-with-eureka: false #表示是否向eureka注册中心注册自己
service-url:
defaultZone: http://eureka7111.com:7111/eureka/,http://eureka7222.com:7222/eureka/,http://eureka7333.com:7333/eureka/

再创建一个controller

@RestController
public class DuptConsumerController {
    //消费者不应该有service
    //RestTemplate  供我们调用
    @Autowired
    private DuptClientService duptClientService;
    @RequestMapping("/consumer//dupt/get/{id}")
    public Dupt get(@PathVariable int id){
        return this.duptClientService.queryById();
    }
    @RequestMapping("/consumer//dupt/add")
    public boolean add(){
        return this.duptClientService.addDupt(new Dupt());
    }
    @RequestMapping("/consumer//dupt/list")
    public List<Dupt> list(){
        return this.duptClientService.queryAll();
    }

}

pom文件中导入我们的实体类模块

启动类如下:主要加上
@EnableEurekaClient
@EnableFeignClients(basePackages = “com.duan.springcloud”)
俩注解

@SpringBootApplication()
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.duan.springcloud")
public class SpringcloudConsumerdeptFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudConsumerdeptFeignApplication.class, args);
    }

}