spring cloud 之 Ribbon

簡介

Spring Cloud Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,它基於Netflix Ribbon實現。通過Spring Cloud的封裝,可以讓我們輕鬆地將面向服務的REST模版請求自動轉換成客戶端負載均衡的服務調用。Spring Cloud Ribbon雖然只是一個工具類框架,它不像服務註冊中心、配置中心、API網關那樣需要獨立部署,但是它幾乎存在於每一個Spring Cloud構建的微服務和基礎設施中。因爲微服務間的調用,API網關的請求轉發等內容,實際上都是通過Ribbon來實現的,包括後續我們將要介紹的Feign,它也是基於Ribbon實現的工具。所以,對Spring Cloud Ribbon的理解和使用,對於我們使用Spring Cloud來構建微服務非常重要。

                                                                                              以上參考於:https://www.jianshu.com/p/1bd66db5dc46

本文重在搭建一個簡單的eureka server 、eureka client、eureka ribbon client。使用spring boot 2.0.1 + maven。

想了解更多的內容,大家可以參考其他的博客或者相應的書籍,這裏不多加贅述。

eureka server 、eureka client 代碼部分與 我之前的 Spring Cloud 之Eureka server 、Eureka client    一樣,大家可以參考那篇博客,這裏不多贅述。    

 

eureka ribbon client

pom.xml

以下是關鍵部分,spring boot 版本是 2.0

<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>

        <!-- ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

         <!-- hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

 application.yml

spring:
  application:
    name: eureka-ribbon-client
server:
  port: 8763
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

 

pom和application都配置好了後,還要在啓動類開啓 eureka server。用到註解:

@EnableEurekaClient

我們要做到通過訪問 ribbon-client達到負載到eureka0client上的目的。所以還要寫個controller、service類。

service代碼示例如下:

@Service
public class RibbonService {
    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError")
    public String hi(String name) {
        return restTemplate.getForObject("http://eureka-client/hi?name=" + name, String.class);
    }

    public String hiError(String name){
        return "hi, "+name+", soory,error!";
    }

}

細心的你可能會發現,我上面還用到了 hystrix 。這個以後有機會再介紹,用到了這個還得在啓動類加上註解:

@EnableHystrix

 

 controller代碼示例如下:

@RestController
public class RibbonController {

    @Autowired
    RibbonService ribbonService;

    @GetMapping("hi")
    public String hi(@RequestParam(required = false,defaultValue = "leis") String name){
        return ribbonService.hi(name);
    }

}

 

然後依次啓動 eureka server、eureka client、eureka ribbon client。這裏就沒演示上面負載了,我就啓動了一個eureka client意思一下,電腦太卡。訪問 http://localhost:8763/hi?name=yiyiyi,就能看到效果了。

(1) 從 eureka server  可以看到,eureka client、eureka ribbon client都已經up

 (2)訪問 http://localhost:8763/hi?name=yiyiyi

 (3)我們可以還測試一下 hystrix 。關閉 eureka client,然後重複第(2)步操作。(sorry 還寫錯了 ,hahahahaha.......)

 

 說明hystrix 也生效了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章