SpringCloud學(xué)習(xí)(三)之Feign

Feign簡(jiǎn)介

Feign是一個(gè)聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡(jiǎn)單。使用Feign,只需要?jiǎng)?chuàng)建一個(gè)接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的編碼器和解碼器。Feign默認(rèn)集成了Ribbon,并和Eureka結(jié)合,默認(rèn)實(shí)現(xiàn)了負(fù)載均衡的效果。

特點(diǎn)如下:

  • Feign 采用的是基于接口的注解
  • Feign 整合了ribbon,具有負(fù)載均衡的能力
  • 整合了Hystrix(下一篇講到),具有熔斷的能力
  1. 引入依賴:
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 配置文件:
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8765
spring:
  application:
    name: service-feign
  1. 添加注解:
    在程序的啟動(dòng)類加上注解@EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run( ServiceFeignApplication.class, args);
    }
}
  1. 測(cè)試:
    定義一個(gè)Feign接口,通過(guò)@FeignClient(“服務(wù)名”),來(lái)指定調(diào)用哪個(gè)服務(wù)。比如在代碼中調(diào)用了service-1服務(wù)的“/hello”接口,代碼如下:
@FeignClient(value = "service-1")
public interface SchedualServiceHello {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    String sayHelloFromClientOne(@RequestParam(value = "name") String name);
}

在Controller層,對(duì)外暴露一個(gè)”/hello”的API接口,通過(guò)上面定義的Feign客戶端SchedualServiceHello去消費(fèi)服務(wù)。代碼如下:

@RestController
public class HelloController {

    @Autowired
    SchedualServiceHello schedualServiceHello;

    @GetMapping(value = "/hello")
    public String sayHello(@RequestParam String name) {
        return schedualServiceHello.sayHiFromClientOne(name);
    }
}

依次啟動(dòng)端口為8761、8762、8763、8765的微服務(wù),多次訪問(wèn)http://localhost:8765/hello?name=tom,兩個(gè)service-1實(shí)例會(huì)被輪流調(diào)用,這就說(shuō)明進(jìn)行了負(fù)載均衡,訪問(wèn)了不同的端口的服務(wù)實(shí)例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容