(三)Fegin聲明式服務調用


上一篇,講了SpringClound中的消費者采用Ribbon+Rest來實現,這回我們用組件Feign來實現服務的消費者,Fegin中也是默認集成了Ribbon的;和Eureka結合也能實現負載均衡;

概括來說,Fegin的區別就是基於注解來實現,具備可插拔的特性;

依賴前文說的Eureka,service-hello(一個項目,注冊兩個實例)

 

創建Fegin項目;

在Idea里,新建項目,選擇Spring initializer.

 

下面的pom

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

  

配置properties文件參數;

#服務端口
server.port=8886

#注冊服務中心地址
eureka.client.service-url.defaultZone=http://localhost:8882/eureka/

#注冊服務名
spring.application.name=service-feign

  

啟動類如下:

@EnableDiscoveryClient
@EnableFeignClients      //開啟Feign的功能:
@SpringBootApplication
public class SpringCloundEurekaFeginExampleApplication {

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

  

然后我們定義一個fegin的接口,在這個接口中我們通過@ FeignClient(“服務名”)來實現消費服務提供者;

//代表改接口用費"service-hello"的服務 提供
@FeignClient(value = "service-hello")
public interface IFeginService {

    @RequestMapping(value = "/index")
    public String index();
}

  

我們再在fegin項目中暴露一個訪問接口,controller;

@RestController
public class FeginController {

    @Autowired
    private IFeginService feginService;

    @RequestMapping("/index")
    public String index(){
        return feginService.index();
    }
}

  

代碼基本編寫完成,下面我們來啟動項目;Eureka,service-hello(兩個實例),最后啟動service-fegin;

 

Feign整合了Ribbon和Hystrix,此外,Spring Cloud還對Feign提供了Spring MVC注解的支持,也使得我們在Web中可以使用同一個HttpMessageConverter

總起來說,Feign具有如下特性:

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解;
  • 支持可插拔的HTTP編碼器和解碼器;
  • 支持Hystrix和它的Fallback;
  • 支持Ribbon的負載均衡;
  • 支持HTTP請求和響應的壓縮。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM