簡介
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 也生效了。