Spring Cloud簡(jiǎn)介
Spring Cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開發(fā)工具,它為基于JVM的云應(yīng)用開發(fā)中涉及的配置管理同诫、服務(wù)發(fā)現(xiàn)恨锚、斷路器、智能路由瞳收、微代理碉京、控制總線、全局鎖螟深、決策競(jìng)選谐宙、分布式會(huì)話和集群狀態(tài)管理等操作提供了一種簡(jiǎn)單的開發(fā)方式。
Spring Cloud包含了多個(gè)子項(xiàng)目(針對(duì)分布式系統(tǒng)中涉及的多個(gè)不同開源產(chǎn)品)界弧,比如:Spring Cloud Config凡蜻、Spring Cloud Netflix、Spring Cloud0 CloudFoundry垢箕、Spring Cloud AWS划栓、Spring Cloud Security、Spring Cloud Commons条获、Spring Cloud Zookeeper忠荞、Spring Cloud CLI等項(xiàng)目。
Spring Cloud Eureka
首先,我們來(lái)嘗試使用Spring Cloud Eureka來(lái)實(shí)現(xiàn)服務(wù)治理钻洒。
Spring Cloud Eureka是Spring Cloud Netflix項(xiàng)目下的服務(wù)治理模塊。而Spring Cloud Netflix項(xiàng)目是Spring Cloud的子項(xiàng)目之一锄开,主要內(nèi)容是對(duì)Netflix公司一系列開源產(chǎn)品的包裝素标,它為Spring Boot應(yīng)用提供了自配置的Netflix OSS整合。通過(guò)一些簡(jiǎn)單的注解萍悴,開發(fā)者就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)头遭。它主要提供的模塊包括:服務(wù)發(fā)現(xiàn)(Eureka),斷路器(Hystrix)癣诱,智能路由(Zuul)计维,客戶端負(fù)載均衡(Ribbon)等。
下面撕予,就來(lái)具體看看如何使用Spring Cloud Eureka實(shí)現(xiàn)服務(wù)治理鲫惶。
創(chuàng)建“服務(wù)注冊(cè)中心”
利用Idea的Spring Initializr來(lái)快速構(gòu)建Spring Boot/Cloud工程,勾選Cloud Discovery下的Eureka Server
通過(guò)@EnableEurekaServer注解啟動(dòng)一個(gè)服務(wù)注冊(cè)中心提供給其他應(yīng)用進(jìn)行對(duì)話实抡。這一步非常的簡(jiǎn)單欠母,只需要在一個(gè)普通的Spring Boot應(yīng)用中添加這個(gè)注解就能開啟此功能,比如下面的例子:
package com.example.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudApplication {
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(SpringCloudApplication.class, args);
? ? }
}
在默認(rèn)設(shè)置下吆寨,該服務(wù)注冊(cè)中心也會(huì)將自己作為客戶端來(lái)嘗試注冊(cè)它自己赏淌,所以我們需要禁用它的客戶端注冊(cè)行為,只需要在application.yml配置文件中增加如下信息:
server:
? port: 8761
eureka:
? instance:
? ? hostname: localhost
? client:
? ? register-with-eureka: false
? ? fetch-registry: false
? ? service-url:
? ? ? default-zone:http: //${eureka.instance.hostname}:${server.port}/eureka/
啟動(dòng)工程后啄清,訪問:http://localhost:8761/六水,可以看到下面的頁(yè)面,其中還沒有發(fā)現(xiàn)任何服務(wù)辣卒。
創(chuàng)建“服務(wù)提供方”
下面我們創(chuàng)建提供服務(wù)的客戶端掷贾,并向服務(wù)注冊(cè)中心注冊(cè)自己。本文我們主要介紹服務(wù)的注冊(cè)與發(fā)現(xiàn)添寺,所以我們不妨在服務(wù)提供方中嘗試著提供一個(gè)接口來(lái)獲取當(dāng)前所有的服務(wù)信息胯盯。
在剛剛建好的項(xiàng)目下,直接再創(chuàng)建一個(gè)Moudle,同樣利用Idea的Spring Initializr來(lái)快速構(gòu)建Spring Boot/Cloud工程计露,勾選Cloud Discovery下的Eureka Discovry
通過(guò)@EnableEurekaServer注解啟動(dòng)一個(gè)服務(wù)注冊(cè)中心提供給其他應(yīng)用進(jìn)行對(duì)話博脑。這一步非常的簡(jiǎn)單,只需要在一個(gè)普通的Spring Boot應(yīng)用中添加這個(gè)注解就能開啟此功能票罐,比如下面的例子:
package com.example.springcloudclient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(ServiceHiApplication.class, args);
? ? }
? ? @Value("${server.port}")
? ? String port;
? ? @RequestMapping("/hi")
? ? public String home(@RequestParam String name){
? ? ? ? return "Hi " + name + " I am from port:" + port;
? ? }
}
在默認(rèn)設(shè)置下叉趣,該服務(wù)注冊(cè)中心也會(huì)將自己作為客戶端來(lái)嘗試注冊(cè)它自己,所以我們需要禁用它的客戶端注冊(cè)行為该押,只需要在application.yml配置文件中增加如下信息:
eureka:
? client:
? ? service-url:
? ? ? defaultZone: http://localhost:8761/eureka/
server:
? port: 8762
spring:
? application:
? ? name: service-hi
通過(guò)spring.application.name屬性疗杉,我們可以指定微服務(wù)的名稱后續(xù)在調(diào)用的時(shí)候只需要使用該名稱就可以進(jìn)行服務(wù)的訪問。eureka.client.serviceUrl.defaultZone屬性對(duì)應(yīng)服務(wù)注冊(cè)中心的配置內(nèi)容,指定服務(wù)注冊(cè)中心的位置烟具。為了在本機(jī)上測(cè)試區(qū)分服務(wù)提供方和服務(wù)注冊(cè)中心梢什,使用server.port屬性設(shè)置不同的端口。
由于Idea中默認(rèn)的SpringBoot是單實(shí)例模式運(yùn)行朝聋,要想多個(gè)實(shí)例同時(shí)運(yùn)行嗡午,參考:Idea同時(shí)運(yùn)行多個(gè)SpringBoot。
啟動(dòng)工程后冀痕,再次訪問http://localhost:8761/? 可以發(fā)現(xiàn)我們定義的服務(wù)被成功注冊(cè)了
我們也可以訪問?http://localhost:8762/hi