Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請(qǐng)求遠(yuǎn)程服務(wù)時(shí)能與調(diào)用本地方法一樣的編碼體驗(yàn),開發(fā)者完全感知不到這是遠(yuǎn)程方法,更感知不到這是個(gè)HTTP請(qǐng)求。
Feign使得 Java HTTP 客戶端編寫更方便。Feign 靈感來源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是為了降低統(tǒng)一綁定Denominator到HTTP API的復(fù)雜度,不區(qū)分是否支持Restful。Feign旨在通過最少的資源和代碼來實(shí)現(xiàn)和HTTP API的連接。通過可定制的解碼器和錯(cuò)誤處理,可以編寫任意的HTTP API。
** 主要特點(diǎn) **
- 定制化
- 提供多個(gè)接口
- 支持JSON格式的編碼和解碼
- 支持XML格式的編碼和解碼
由于Feign是基于Ribbon的,所以這里使用了Feign就已經(jīng)具備了Ribbon的負(fù)載均衡功能
1.引入依賴
"org.springframework.cloud:spring-cloud-starter-feign:${cloud_config}"
2.稍作配置
在bootstrap.yaml中加入Eureka server相關(guān)配置
spring:
cloud:
config:
uri: http://localhost:8888
profile: rabbit
name: appliaction
username: pkaq
password: pkaqx
Feign在默認(rèn)情況下使用的是JDK原生的URLConnection發(fā)送HTTP請(qǐng)求,沒有連接池,但是對(duì)每個(gè)地址會(huì)保持一個(gè)長連接,即利用HTTP的persistence connection 。我們可以用Apache的HTTP Client替換Feign原始的http client, 從而獲取連接池、超時(shí)時(shí)間等與性能息息相關(guān)的控制能力。Spring Cloud從Brixtion.SR5版本開始支持這種替換,首先在項(xiàng)目中聲明Apache HTTP Client和feign-httpclient依賴:\
compile "com.netflix.feign:feign-httpclient:${feign_httpclient}"
feign:
httpclient:
enabled: true
3.添加注解
@EnableEurekaClient
4.來點(diǎn)代碼
啟動(dòng)類代碼
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
open class RibbonClientBooter: CommandLineRunner{
@Throws(Exception::class)
override fun run(vararg args: String) {
println(" --- --- --- [ Ribbon client started ] --- --- --- ")
}
}
fun main(args: Array<String>) {
org.springframework.boot.SpringApplication.run(org.pkaq.RibbonClientBooter::class.java, *args)
}
Feign接口
@org.springframework.cloud.netflix.feign.FeignClient("tiger")
internal interface FeignClient {
// 所請(qǐng)求的服務(wù)接口
@RequestMapping("/say")
fun say(): String
}
Controller代碼
@RestController
open class FeignController {
@Autowired
private var feignClient: FeignClient? = null
@RequestMapping("/Feign")
fun say(): String {
return feignClient!!.say()+"--> Feign"
}
}
5.啟動(dòng)服務(wù),大功告成