Spring Cloud Learning | 第四篇:声明式服务调用(Fegin)

一. Feigin简介

      Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用Ribbon时自行封装服务调用客户端的开发量。

      Feign具有可插拔的注解特性,包括Feign 注解和JAX-RS注解,同时也扩展了对SpringMVC的注解支持。Feign支持可插拔的编码器和解码器,默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。


二. 快速入门

2.1 启动之前的eureka-server工程,端口号为8761,启动eureka-client工程两次,端口号为8762和8763。

2.2 创建Feign服务

      首先新建一个Spring Boot基础工程,命名为service-feign,在pom.xml中引入必要的依赖:



	4.0.0

	com.dan
	service-feign
	0.0.1-SNAPSHOT
	jar

	service-feign
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.9.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Edgware.SR1
	

	
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		

		
			org.springframework.cloud
			spring-cloud-starter-feign
		

		
			org.springframework.boot
			spring-boot-starter-web
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	




      在工程的配置文件application.properties文件上配置指定服务注册中心、自身的服务名、端口号等:

spring.application.name=service-feign
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
server.port=8765
      在启动类上加上@EnableFeignClients注解开启Feign的支持功能:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {

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

      定义HelloService接口,通过@FeignClient注解指定服务名来绑定服务指定调用哪个服务,然后再使用Spring MVC的注解来绑定具体该服务提供的REST接口:

@FeignClient("hello-service")
public interface HelloService {

	@GetMapping("/hello")
	String hello(@RequestParam(value = "name") String name);
	
}
      接着,创建一个controller来实现对Feign客户端的调用
@RestController
public class HelloController {

  @Autowired
  HelloService helloService;
 
  @GetMapping(value = "/hello")
  public String sayHi(@RequestParam(value = "name") String name){
   return helloService.sayHello(name);
  }
}
      启动工程,Eureka Server的信息面板:
Spring Cloud Learning | 第四篇:声明式服务调用(Fegin)_第1张图片

      多次访问localhost:8765/hello?name=Jack 交替看到:

Hello Jack. I am from port:8762
Hello Jack. I am from port:8763

 

源码下载:https://github.com/lingd3/SpringCloudLearning/tree/master/chapter4




你可能感兴趣的:(springcloud)