1. 程式人生 > >spring cloud學習--Feign

spring cloud學習--Feign

variable config 聲明 tco int start pen return 方法簽名

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