SpringCloud負載均衡器ribbon

源於螞蟻課堂的學習,點擊這裏查看(老餘很給力) 

ribbon

客戶端從註冊中心根據別名的方式獲取對應服務地址列表,將其緩存至本地內存,本地進行負載均衡

 使用discoveryClient負載本地負載均衡



	// 原子類保證線程安全
    private AtomicInteger atomicInteger = new AtomicInteger();

	@RequestMapping("/discoveryClient")
	public String discoveryClient() {

		String serviceUrl = getServiceUrl() + "/getMember";
		if (StringUtils.isEmpty(serviceUrl)) {
			return "請求地址爲null";
		}
		// 請求地址
		System.out.println("serviceUrl:" + serviceUrl);
		String result = restTemplate.getForObject(serviceUrl, String.class);
		return result;
	}

	@RequestMapping("/getServiceUrl")
	private String getServiceUrl() {
		List<ServiceInstance> instances = discoveryClient.getInstances("order-service");
		if (instances == null || instances.size() == 0) {
			return null;
		}
		int size = instances.size();
		int index = atomicInteger.intValue() % size;
		atomicInteger.incrementAndGet();
		return instances.get(index).getUri().toString();
	}

Ribbon與Nginx區別 

nginx是客戶端所有請求統一交給nginx,由nginx進行實現負載均衡請求轉發,屬於服務器端負載均衡。
既請求有nginx服務器端進行轉發。

Ribbon是從eureka註冊中心服務器端上獲取服務註冊信息列表,緩存到本地,讓後在本地實現輪訓負載均衡策略。
既在客戶端實現負載均衡。


Nginx適合於服務器端實現負載均衡 比如Tomcat ,
Ribbon適合與在微服務中RPC遠程調用實現本地服務負載均衡,比如Dubbo、SpringCloud中都是採用本地負載均衡。

 

 

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