自Spring Cloud Alibaba發佈第一個Release以來,就備受國內開發者的高度關注。雖然Spring Cloud Alibaba還沒能歸入Spring Cloud的主版本管理中,可是憑藉阿里中間件團隊的背景,仍是獲得很多團隊的支持;同時,因爲Spring Cloud Alibaba中的幾項主要功能都直指Netflix OSS中的重要組件,然後者最近頻繁宣佈各組件不在更新新特性,這使得Spring Cloud Alibaba關注度不斷飆升,很多開發者或團隊也開始小範圍試水。筆者對此也進行了一段時間的調研與試水,接下來計劃以《Spring Cloud Alibaba基礎教程》爲主題,爲你們完成一套快速入門的免費內容,以支持開源社區的發展! ^_^html
更多關於Spring Cloud Alibaba的介紹可見:《Spring Cloud 加盟重量級成員Spring Cloud Alibaba,打造更符合中國國情的微服務體系》java
Nacos致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos幫助您更敏捷和容易地構建、交付和管理微服務平臺。Nacos是構建以「服務」爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。git
在接下里的教程中,將使用Nacos做爲微服務架構中的註冊中心(替代:eurekba、consul等傳統方案)以及配置中心(spring cloud config)來使用。github
下載地址:https://github.com/alibaba/na...
本文版本:0.7.0web
下載完成以後,解壓。根據不一樣平臺,執行不一樣命令,啓動單機版Nacos服務:spring
sh startup.sh -m standalone
cmd startup.cmd -m standalone
startup.sh
腳本位於Nacos解壓後的bin目錄下。這裏主要介紹Spring Cloud與Nacos的集成使用,對於Nacos的高級配置,後續再補充。因此,持續關注個人博客或者公衆號吧!
啓動完成以後,訪問:http://127.0.0.1:8848/nacos/
,能夠進入Nacos的服務管理頁面,具體以下;bash
在完成了Nacos服務的安裝和啓動以後,下面咱們就能夠編寫兩個應用(服務提供者與服務消費者)來驗證服務的註冊與發現了。架構
第一步:建立一個Spring Boot應用,能夠命名爲:alibaba-nacos-discovery-server
。若是您還不會或者不瞭解Spring Boot應用,建議先學習《Spring Boot基礎教程》。app
第二步:編輯pom.xml
,加入必要的依賴配置,好比:負載均衡
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <optional>true</optional> </dependency> </dependencies>
上述內容主要三部分:
parent
:定義spring boot的版本dependencyManagement
:spring cloud的版本以及spring cloud alibaba的版本,因爲spring cloud alibaba還未歸入spring cloud的主版本管理中,因此須要本身加入dependencies
:當前應用要使用的依賴內容。這裏主要新加入了Nacos的服務註冊與發現模塊:spring-cloud-starter-alibaba-nacos-discovery
。因爲在dependencyManagement
中已經引入了版本,因此這裏就不用指定具體版本了。第三步:建立應用主類,並實現一個HTTP接口:
@EnableDiscoveryClient @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Slf4j @RestController static class TestController { @GetMapping("/hello") public String hello(@RequestParam String name) { log.info("invoked name = " + name); return "hello " + name; } } }
內容很是簡單,@SpringBootApplication
定義是個Spring Boot應用;@EnableDiscoveryClient
開啓Spring Cloud的服務註冊與發現,因爲這裏引入了spring-cloud-starter-alibaba-nacos-discovery
模塊,因此Spring Cloud Common中定義的那些與服務治理相關的接口將使用Nacos的實現。這點不論咱們使用Eureka、Consul仍是其餘Spring Cloud整合的註冊中心都同樣,這也是Spring Cloud作了封裝的好處所在,若是對Eureka、Consul這些註冊中心的整合還不熟悉的能夠看看之前的這篇:Spring Cloud構建微服務架構:服務註冊與發現(Eureka、Consul)。
第四步:配置服務名稱和Nacos地址
spring.application.name=alibaba-nacos-discovery-server server.port=8001 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步:啓動上面建立的應用。能夠在啓動時候增長-Dserver.port=8001
的形式在本機的不一樣端口上啓動多個實例。
在應用啓動好以後,咱們能夠在控制檯或日誌中看到以下內容,表明已經註冊成功:
INFO 10476 --- [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, alibaba-nacos-discovery-server 10.123.18.216:8001 register finished
在啓動都ok以後,咱們能夠訪問Nacos的管理頁面http://127.0.0.1:8848/nacos/來查看服務列表,此時能夠看到以下內容:
這裏會顯示當前註冊的全部服務,以及每一個服務的集羣數目、實例數、健康實例數。點擊詳情,咱們還能看到每一個服務具體的實例信息,以下圖所示:
接下來,實現一個應用來消費上面已經註冊到Nacos的服務。
第一步:建立一個Spring Boot應用,命名爲:alibaba-nacos-discovery-client-common
。
第二步:編輯pom.xml中的依賴內容,與上面服務提供者的同樣便可。
第三步:建立應用主類,並實現一個HTTP接口,在該接口中調用服務提供方的接口。
@EnableDiscoveryClient @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Slf4j @RestController static class TestController { @Autowired LoadBalancerClient loadBalancerClient; @GetMapping("/test") public String test() { // 經過spring cloud common中的負載均衡接口選取服務提供節點實現接口調用 ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server"); String url = serviceInstance.getUri() + "/hello?name=" + "didi"; RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); return "Invoke : " + url + ", return : " + result; } } }
這裏使用了Spring Cloud Common中的LoadBalancerClient
接口來挑選服務實例信息。而後從挑選出的實例信息中獲取可訪問的URI,拼接上服務提供方的接口規則來發起調用。
第四步:配置服務名稱和Nacos地址,讓服務消費者能夠發現上面已經註冊到Nacos的服務。
spring.application.name=alibaba-nacos-discovery-client-common server.port=9000 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步:啓動服務消費者,而後經過curl或者postman等工具發起訪問,下面以curl爲例:
$ curl localhost:9000/test Invoke : http://10.123.18.216:8001/hello?name=didi, return : hello didi $ curl localhost:9000/test Invoke : http://10.123.18.216:8002/hello?name=didi, return : hello didi
能夠看到,兩次不一樣請求的時候,真正實際調用的服務提供者實例是不一樣的,也就是說,經過LoadBalancerClient
接口在獲取服務實例的時候,已經實現了對服務提供方實例的負載均衡。可是很明顯,這樣的實現仍是比較繁瑣,預告下後面的幾篇,關於服務消費的幾種不一樣姿式。
本文示例讀者能夠經過查看下面倉庫的中的alibaba-nacos-discovery-server
和alibaba-nacos-discovery-client-common
項目:
若是您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!