spring cloud学习--Feign

Posted 随风去。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud学习--Feign相关的知识,希望对你有一定的参考价值。

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文件修改

<dependencies>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>
		
		<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>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</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>

	</dependencies>

  2.application.yml

server:
  port: 8002

eureka: 
  client: 
    register-with-eureka: false
    service-url: 
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/

  3.编写ClientService  

@FeignClient(value ="cloud-provider-dept")
public interface DeptClientService {
	
	@RequestMapping(value ="/dept/add",method=RequestMethod.POST)
	public boolean add(@RequestBody Dept d) ;
	
	@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() ;
}

  4.编写Controller

@RestController
public class DeptController_consumer {
	
	@Autowired
	private DeptClientService service;
	
	@RequestMapping(value ="/consumer/dept/add")
	public boolean add(@RequestBody Dept d) {
		
		return service.add(d);
	}
	@RequestMapping(value ="/consumer/dept/get/{id}")
	public Dept get(@PathVariable("id") Long id) {
		return service.get(id);
	}
	
	@RequestMapping(value ="/consumer/dept/list")
	public List<Dept> list() {

		return service.list();
	}
}

  5.修改主启动类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.wuzz.springcloud"})
@ComponentScan("com.wuzz.springcloud")
public class DeptConsumer_feign_App 
{
    public static void main( String[] args )
    {
    	SpringApplication.run(DeptConsumer_feign_App.class, args);
    }
}

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请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。









以上是关于spring cloud学习--Feign的主要内容,如果未能解决你的问题,请参考以下文章

Spring cloud Feign 深度学习与应用

Spring Cloud Feign 调用过程分析

Spring Cloud Feign 调用过程分析

Spring Cloud 学习——5.使用 feign 的 hystrix 支持

Spring Cloud声名式服务调用:Feign 的使用(下)

spring cloud中如何通过feign调整负载均衡规则