微服务架构--SpringCloud(6)

Feign 负载均衡

*官方解释:

*http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign

*定义:

*Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也可以支持可插拔式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

*总结:

*Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。

*Ribbon是面向微服务编程

*Feign是面向接口编程

*参考官网:

*https://github.com/OpenFeign/feign

*Feign作用:

*Feign旨在使编写Java Http客户端变得更容易

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

*步骤:

*步骤:

*1.创建子项目:microservicecloud-consumer-dept-feign

*2.复制80的pom.xml,修改pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<artifactId>microservicecloud-consumer-dept-feign</artifactId>

<parent>

<groupId>com.springcloud</groupId>

<artifactId>microservicecloud</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<dependencies>

<dependency><!-- 引入自定义的api通用包 -->

<groupId>com.springcloud</groupId>

<artifactId>microservice-api</artifactId>

<version>${project.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- 修改后立即生效,热部署 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

</dependency>

<!-- Ribbon相关 -->

<!-- Ribbon要与Eureka整合 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-ribbon</artifactId>

</dependency>

<!-- 与Eureka有关 Eureka与Ribbon有关 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-config</artifactId>

</dependency>

<!-- 添加Feignl依赖 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-feign</artifactId>

</dependency>

</dependencies>

</project>

*3.修改api包,添加service包下的 DeptClientService类

@FeignClient(value = "MICROSERVICECLOUD-DEPT")

public interface DeptClientService {

@RequestMapping(value = "/dept/add",method = RequestMethod.POST)

public boolean add(Dept dept);

@RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)

public Dept get(Long id);

@RequestMapping(value = "/dept/list",method = RequestMethod.GET)

public List<Dept> list();

}

*4.修改Feign工程的controller

@RestController

public class DeptController_Consumer {

@Resource

private DeptClientService service;

@RequestMapping(value = "/consumer/dept/add")

public boolean add(Dept dept){

return this.service.add(dept);

}

@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();

}

}

*5.修改主启动类

@SpringBootApplication

@EnableEurekaClient

@EnableFeignClients(basePackages = {"com.mky"})

@ComponentScan("com.mky")

public class DeptConsumer80_Feign_App {

public static void main(String[] args) {

SpringApplication.run(DeptConsumer80_Feign_App.class,args);

}

}

*Feign继承了Ribbon

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

*Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate)

*该请求发送给Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list)

*通过Feign直接找到服务接口,由于在进行服务调用的时候Ribbon技术,所以也支持负载均衡

猜你喜欢

转载自blog.csdn.net/debugbugbg/article/details/81529713