1. 程式人生 > >Eclipse初次搭建SpringCloud+ribbon負載均衡(三)

Eclipse初次搭建SpringCloud+ribbon負載均衡(三)

把上一個文章的專案重新複製一份 修改下yml中埠(文章地址: https://blog.csdn.net/yuzhiqiang_1/article/details/84580665)

一: application.yml

server:
  port: 12347  # 你的埠
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:12345/eureka/  # 服務中心地址
spring:
  application:
    name: clientName # 客戶端的名字

二:建立一個ribbon專案(不會建立專案的可以看第一篇Cloud文章

https://blog.csdn.net/yuzhiqiang_1/article/details/84578506)

新增application.yml檔案,埠要與之前的專案區分開

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:12345/eureka/
server:
  port: 12348 
spring:
  application:
    name: ribbon

修改RibbonApplication

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient // 定義為客戶端
public class RibbonApplication {

	public static void main(String[] args) {
		SpringApplication.run(RibbonApplication.class, args);
	}
	
	/**
	 * @LoadBalanced註解表明這個restRemplate開啟負載均衡的功能。
	 * @return
	 */
	@Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

新增個service類(HelloService) 呼叫複製出的專案與被複制的專案 我這裡叫discSystem-4、discSystem-4-1

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * 問題一: 什麼是REST REST(RepresentationalState Transfer)是Roy Fielding
 * 提出的一個描述互聯絡統架構風格的名詞。REST定義了一組體系架構原則,您可以根據這些原則設計以系統資源為中心的Web
 * 服務,包括使用不同語言編寫的客戶端如何通過 HTTP處理和傳輸資源狀態。
 * 
 * 為什麼稱為 REST?Web本質上由各種各樣的資源組成,資源由URI
 * 唯一標識。瀏覽器(或者任何其它類似於瀏覽器的應用程式)將展示出該資源的一種表現方式,或者一種表現狀態。
 * 如果使用者在該頁面中定向到指向其它資源的連結,則將訪問該資源,並表現出它的狀態。
 * 這意味著客戶端應用程式隨著每個資源表現狀態的不同而發生狀態轉移,也即所謂REST。
 * 
 * 問題二: RestTemplate Spring'scentral class for synchronous client-side HTTP
 * access.It simplifies communication with HTTPservers, and enforces RESTful
 * principles. Ithandles HTTP connections, leaving application code to provide
 * URLs(with possible template variables) andextract results.
 * 簡單說就是:簡化了發起HTTP請求以及處理響應的過程,並且支援REST
 * 
 * @author 於志強
 *
 * 2018年11月28日 上午11:10:45
 */
@Service
public class HelloService {

	@Autowired
	RestTemplate restTemplate; //

	public String hiService(String name) {
		return restTemplate.getForObject("http://CLIENTNAME/test", String.class);
	}

}

新增Controller類(HelloController) 呼叫server


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
	@Autowired
	HelloService helloService;

	@RequestMapping(value = "/demo") // 隨便起個自己喜歡的訪問名字
	public String hi(@RequestParam String name) {
		return helloService.hiService(name);
	}
}

 

注:

啟動

第一篇的discSystem-3專案(server)

第二篇的discSystem-4專案(Client)

本篇被複製出來的discSystem-4-1專案(Client)

本篇新建立的ribbon專案(Client + Ribbon)

 

訪問(http://localhost:12345/

 

訪問(http://localhost:12348/demo) 會自動分配請求的服務

 

關係圖

注: 所有的專案都是前面文章中的