自學spring-cloud系列,越來越感覺spring-cloud很強大!
主要分爲以下幾篇:
介紹
spring-cloud-eureka,更加具體的內容,這裏將會介紹遠程服務調用和及其負載均衡。
我們將我們的服務註冊在我們的服務中心裏,那麼如何去調用這些服務呢?我們可以用使用遠程服務調用來解決,順帶還有方便的負載均衡功能。
如何使用
- 創建服務中心
- 註冊幾個被調用服務
- 註冊一個consumer
- 測試consumer與負載均衡
1. 創建服務中心
上一篇文章,我們已經學會了使用單機或者集羣的方式來創建服務中心,這裏我們使用簡單的單機方式來創建!
在 spring-cloud-eureka-server
裏啓動採用這個profile文件:
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
lease-expiration-duration-in-seconds: 6
lease-renewal-interval-in-seconds: 2
client:
service-url:
defaultZone: http://localhost:8761/eureka/
這個是單機版的。並將自己註冊到了服務裏。
2. 註冊幾個被調用服務
我們啓動了這三個profile文件。
配置文件中,server.port
分別是 8083,8084,8085,其他參數完全一致!同時,我們在controller中設置了這樣一個rest服務。
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String hi() {
return port+" 端口爲您服務!";
}
這樣方便知道我們具體調用了哪個服務。
3. 註冊一個consumer
需要額外的依賴,使用了feign來進行遠程調用。
pom.xml :
<!--遠程調用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
創建一個接口:
@Component
@FeignClient(name = "eureka-client-1")
public interface HelloRemoteInterface {
@RequestMapping(value = "/hi")
public String hi();
}
這裏的name就是你的那個服務的application.name。根據名字來調用,才能實現負載均衡嘛。
使用接口,創建一個測試的controller:
@RestController
public class ConsumerController {
@Autowired
HelloRemoteInterface helloRemoteInterface;
@RequestMapping("/hello")
public String hello() {
return helloRemoteInterface.hi();
}
}
同時,將我們的這個服務也註冊到服務中心。
配置文件:
server:
port: 8086
spring:
application:
name: eureka-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
啓動方法:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class SpringCloudEurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaConsumerApplication.class, args);
}
}
到這裏,我們已經啓動了好多個服務,如上圖所示,在IDEA中,採用不同的profile來啓動的方式,有一個單機的server,三個普通的服務(端口號不一樣),還有我們的消費服務,下一節,你可以從截圖中看的更明白。
4. 測試consumer與負載均衡
到上一步爲止,我們已經可以看到在Eureka的dashboard中已經有了好多個服務,如下圖,主要包括:
- 一個服務註冊server
- 一個消費者,用來進行遠程調用
- 三個普通的client(其端口不一樣,來模擬分佈式)
這時候,我們調用我們的consumer服務,瀏覽器裏輸入 http://localhost:8086/hello
得到的結果是不一樣的,一共有三個:
- 8083 端口爲您服務!
- 8084 端口爲您服務!
- 8085 端口爲您服務!
正好就是我們想要的結果。
不斷的進行測試下去會發現3種結果交替出現,說明服務中心自動提供了服務均衡負載的功能。如果我們將服務提供者的數量在提高爲N個,測試結果一樣,請求會自動輪詢到每個服務端來處理。
示例源碼
所有源碼在我的github倉庫裏,傳送門:https://github.com/xjtushilei/spring-cloud-simples.git
支持
如果你喜歡~ 給個星