Feign简介:
Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。Fegin对Robbin进行了封装,如果需要配置自己的负载算法,可以自定义Ribbon的算法即可
1.pom文件修改
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR3</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<!-- SpringCloud 所有子项目 版本集中管理. 统一所有SpringCloud依赖项目的版本依赖-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin><!-- SpringBoot 项目打jar包的Maven插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.application.yml
server:
port: 9002
spring:
application:
name: feign-server #服务注册到Eureka上使用的名称
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/
instance:
instance-id: feign-server-9002
prefer-ip-address: true #访问路径显示IP地址
3.修改主启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.wuzz.demo"})
public class FeignApp
{
public static void main( String[] args )
{
SpringApplication.run(FeignApp.class, args);
}
}
4.负载均衡配置
@Configuration
public class ConfigBean {
// Eureka是基于REST(Representational State Transfer)服务,
// 主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。
// 我们称此服务为Eureka服务。
// Eureka提供了Java客户端组件,Eureka Client,方便与服务端的交互。
// 客户端内置了基于round-robin实现的简单负载均衡。
// 在Netflix,为Eureka提供更为复杂的负载均衡方案进行封装,
// 以实现高可用,它包括基于流量、资源利用率以及请求返回状态的加权负载均衡。
/**
* Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。
Ribbon客户端组件提供一系列完善的配置项,如,连接超时,重试等。
简单的说,Ribbon是一个客户端负载均衡器,
我们可以在配置文件中列出load Balancer后面所有的机器,
Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,
我们也很容易使用Ribbon实现自定义的负载均衡算法
*
*/
// Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。
// 它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、
// Spring Cloud增加了对Spring MVC注释的支持,
// 并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。
// Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。
@Bean
@LoadBalanced // ribbon是客户端 的负载均衡工具
//默认算法是轮询算法 核心组件IRule
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public IRule myRule() { // 负载均衡算法。。。。
// return new RoundRobinRule();
return new RandomRule();
}
}
5.声明式服务类
@FeignClient(value ="cloud-provider")
public interface ClientService {
@RequestMapping(value ="/hello",method= RequestMethod.GET)
String hello() ;
}
6.controller
@RestController
public class FeignController {
@Autowired
private ClientService service;
@RequestMapping(value ="/feign/hello")
public String hello() {
return service.hello();
}
}
这样就配置好了。
ribbon和feign区别
Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法
feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用 @FeignClient("指定服务名")
Ribbon和Feign的区别:
Ribbon和Feign都是用于调用其他服务的,不过方式不同。
1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,
不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。
来源:oschina
链接:https://my.oschina.net/u/4392265/blog/3565170