Spring Cloud Alibaba基礎:使用Nacos實現服務註冊與發現

什麼是Nacos

Nacos致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos幫助您更敏捷和容易地構建、交付和管理微服務平臺。Nacos是構建以「服務」爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。java

在接下里的教程中,將使用Nacos做爲微服務架構中的註冊中心(替代:eurekba、consul等傳統方案)以及配置中心(spring cloud config)來使用。git

安裝Nacos

下載地址:https://github.com/alibaba/nacos/releases
本文版本:1.1.3github

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

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

 

啓動完成以後,訪問:http://127.0.0.1:8848/nacos/,能夠進入Nacos的服務管理頁面默認帳號密碼都是nacos,具體以下:spring

構建應用接入Nacos註冊中心

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

服務提供者

第一步:建立一個Spring Boot應用,能夠命名爲:alibaba-nacos-discovery-serverapp

第二步:編輯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.2.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>

上述內容主要三部分:curl

  • parent:定義spring boot的版本
  • dependencyManagement:spring cloud的版本以及spring cloud alibaba的版本,因爲spring cloud alibaba還未歸入spring cloud的主版本管理中,因此須要本身加入
  • dependencies:當前應用要使用的依賴內容。這裏主要新加入了Nacos的服務註冊與發現模塊:spring-cloud-starter-alibaba-nacos-discovery。因爲在dependencyManagement中已經引入了版本,因此這裏就不用指定具體版本了。

第三步:建立應用主類,並實現一個HTTP接口:spring-boot

@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作了封裝的好處所在

第四步:配置服務名稱和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 2998 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, alibaba-nacos-discovery-server 192.168.1.139: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

相關文章
相關標籤/搜索