SpringCloud Alibaba-nacos註冊中心

什麼是 Nacos?(https://nacos.io

  Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。html

  Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以「服務」爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。git

服務(Service)是 Nacos 世界的一等公民。Nacos 支持幾乎全部主流類型的「服務」的發現、配置和管理:github

Kubernetes Serviceweb

gRPC & Dubbo RPC Servicespring

Spring Cloud RESTful Serviceapache

Nacos 的關鍵特性包括:瀏覽器

  •   服務發現和服務健康監測安全

    Nacos 支持基於 DNS 和基於 RPC 的服務發現。服務提供者使用 原生SDKOpenAPI、或一個獨立的Agent TODO註冊 Service 後,服務消費者可使用DNS TODO 或HTTP&API查找和發現服務。網絡

    Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對於複雜的雲環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。架構

  •   動態配置服務

    動態配置服務可讓您以中心化、外部化和動態化的方式管理全部環境的應用配置和服務配置。

    動態配置消除了配置變動時從新部署應用和服務的須要,讓配置管理變得更加高效和敏捷。

    配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。

    Nacos 提供了一個簡潔易用的UI (控制檯樣例 Demo) 幫助您管理全部的服務和應用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發佈、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變動和下降配置變動帶來的風險。

  • 動態 DNS 服務

    動態 DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以 DNS 協議爲基礎的服務發現,以幫助您消除耦合到廠商私有服務發現 API 上的風險。

    Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務的關聯域名和可用的 IP:PORT 列表.

  •    服務及其元數據管理

    Nacos 能讓您從微服務平臺建設的視角管理數據中心的全部服務及元數據,包括管理服務的描述、生命週期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。

  • Nacos 全景圖

       阿里巴巴中間件團隊出品的Nacos來做爲新一代的服務管理中間件。

    

  Nacos Spring Cloud 快速開始

   安裝nacos

  下載地址:https://github.com/alibaba/nacos/releases

  

下載完成以後,解壓。根據不一樣平臺,執行不一樣命令,啓動單機版Nacos服務:

  • Linux/Unix/Mac:sh startup.sh -m standalone
  • Windows:cmd startup.cmd -m standalone

   

  startup.sh腳本位於Nacos解壓後的bin目錄下。

  啓動以後 nacos默認端口爲8848

  補充一點,nacos不只能夠作註冊中心,還能夠作分佈式配置,相對SpringCloud 在git作配置較好點

 

 

 構建應用接入Nacos註冊中心

在完成了Nacos服務的安裝和啓動以後,下面咱們就能夠編寫兩個應用(服務提供者與服務消費者)來驗證服務的註冊與發現了。

服務提供者

一、建立第一個Springboot項目  spring-cloud-nacos-provider 做爲服務提供者

二、引入gradle

    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '0.1.1.RELEASE'

注意:這裏以前確實採坑,由於nacos是新生態因此沒法自動和cloud或boot版本一致,因此必須寫入版本號,版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本。

三、建立主要類

啓動入口

 

package org.gw;

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;

/**
 * @DATA 2019-03-18 15:21
 * @Author 張國偉  WeChat:17630376104
 * @Description TODO
 */
@EnableDiscoveryClient
@SpringBootApplication
public class NoApplication {


    public static void main(String[] args) {
        SpringApplication.run(NoApplication.class,args);
    }
}


@RestController
public class NacosProducerController {

@RequestMapping("/hello")
public String hello(@RequestParam("name")String 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作了封裝的好處所在

四、配置文件

server:
  port: 5005
spring:
  application:
    name: spring-cloud-nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        include: '*'

五、啓動應用程序,啓動後能夠看到控制檯日誌出現如下內容說明已經成功註冊到nacos中。

Wed Mar 20 08:59:13 CST 2019 sun.misc.Launcher$AppClassLoader@18b4aac2 JM.Log:INFO Log root path: /Users/mac/logs/
Wed Mar 20 08:59:13 CST 2019 sun.misc.Launcher$AppClassLoader@18b4aac2 JM.Log:INFO Set nacos log path: /Users/mac/logs/nacos
2019-03-20 08:59:13.438  INFO 1645 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, spring-cloud-nacos-provider 172.20.10.3:5005 register finished

在啓動都ok以後,咱們能夠訪問Nacos的管理頁面http://127.0.0.1:8848/nacos/來查看服務列表,此時能夠看到以下內容:

 

 這裏會顯示當前註冊的全部服務,以及每一個服務的集羣數目、實例數、健康實例數。點擊詳情,咱們還能看到每一個服務具體的實例信息,以下圖所示:

 

 

服務消費者

接下來,實現一個應用來消費上面已經註冊到Nacos的服務。

一、建立一個Spring Boot應用,命名爲:spring-cloud-nacos-consumer

二、編輯pom.xml中的依賴內容,與上面服務提供者的同樣便可。

三、建立應用主類,並實現一個HTTP接口,在該接口中調用服務提供方的接口。

package org.gw;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
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;

/**
 * @DATA 2019-03-18 15:45
 * @Author 張國偉  WeChat:17630376104
 * @Description TODO
 */
@EnableDiscoveryClient
@SpringBootApplication
public class ConApplication
{


    @LoadBalanced
    @Bean
    public RestTemplate resultTemplate()
    {
        RestTemplate template = new RestTemplate();
        return template;
    }

    public static void main(String[] args)
    {
        SpringApplication.run(ConApplication.class, args);
    }
}
package org.gw.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @DATA 2019-03-18 16:06
 * @Author 張國偉  WeChat:17630376104
 * @Description TODO
 */
@RestController
public class ConController {

 

    @Autowired
    RestTemplate restTemplate;

    /**
     * 消費服務
     */
    @RequestMapping("/callSayHello")
    public String services(@RequestParam("name") String name) {

        String callServiceResult = restTemplate.getForEntity("http://spring-cloud-nacos-provider/hello?name="+name,String.class).getBody();
        System.out.println(callServiceResult);
        return callServiceResult;
    }


}

四、配置服務名稱和Nacos地址,讓服務消費者能夠發現上面已經註冊到Nacos的服務。

server:
  port: 5006
spring:
  application:
    name: spring-cloud-nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        include: '*'

第五步:啓動服務消費者,咱們在瀏覽器測試:

到此nacos單機版的服務與發現就徹底實現。

本文章示例:https://github.com/zgw1469039806/SpringCloud-nacos

本文參考:http://blog.didispace.com/spring-cloud-alibaba-1/