Spring Cloud是Spring旗下的專案之一
Spring Cloud並不是一個元件 而是許多元件的集合
其將當下非常流行的一些技術整合到了一起 實現了多個分散式開發中的重要功能
協調了分散式環境中各個系統 並且為各類服務提供模板性的設定
其主要涉及的元件包括:
【在本篇中 將介紹Ribbon負載均衡】
負載均衡 顧名思義 就是讓服務的負載更加均衡的…(廢話)
在實際環境中往往會開啟很多個伺服器端的叢集 此時獲取的服務列表中就會有多個
此時 到底該存取哪一個 一般在這種情況下就需要編寫負載均衡演演算法 在多個範例列表中選擇最優的
Eureka中已經整合了負載均衡元件:Ribbon 只需簡單修改程式碼即可使用
Ribbon是一個負載均衡器 有助於控制HTTP和TCP使用者端的行為
為Ribbon設定服務提供者列表後 Ribbon可基於某種負載均衡演演算法 自動地幫助服務消費者去進行請求
Ribbon預設提供了很多的負載均衡演演算法 例如輪詢演演算法 隨機演演算法 等等
輪詢演演算法即為輪著進行 例如共有AB兩個服務提供者 那麼第一次存取A服務提供者 則第二次必定存取B服務提供者 第三次存取A服務提供者 以此類推
隨機演演算法顧名思義 是隨機的
當然 也可為Ribbon實現自定義的負載均衡演演算法
Ribbon預設使用輪詢演演算法
在匯入Eureka使用者端的依賴包的時候同時也自動匯入了Ribbon的相關包:
在執行RestTemplate傳送地址請求的時候 會使用Ribbon負載均衡器進行攔截 然後根據服務名獲取服務地址列表
再使用Ribbon的負載均衡演演算法從服務地址列表中選擇一個服務地址 最後 存取該服務地址 獲取資料
為服務消費者的啟動類中的RestTemplate範例化方法新增@LoadBalanced
註解以開啟使用者端負載均衡功能:
// 註冊RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate()
{
return new RestTemplate();
}
使用步驟很簡單
在服務消費者的介面類中 直接使用服務名來進行負載均衡即可:
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/{id}")
public User queryById(@PathVariable Long id)
{
// Ribbon負載均衡
String url="http://user-service/user/"+id;
return restTemplate.getForObject(url,User.class);
}
}