7.Spring Cloud 之服務(wù)治理 - Eureka服務(wù)發(fā)現(xiàn)- 消費(fèi)者(Feign)

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ù),大功告成

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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