Springcloud-Alibaba 〖十三〗終於等到你 Nacos來啦!! Nacos做服務註冊中心

PS: github倉庫倉庫地址項目都放到裏面了

一. Springcloud-Alibaba

官網地址:Springcloud-Alibaba

  • 服務限流降級: 默認支持Servlet. Feign. RestTemplate、 Dubbo 和RocketMQ限流降級功能的接入,可以在運行時通過控制檯實時修改限流降
    級規則,還支持查看限流降級Metrics監控。
  • 服務註冊與發現: 適配Spring Cloud服務註冊與發現標準,默認集成了Ribbon的支持。
  • 分佈式配置管理: 支持分佈式系統中的外部化配置,配置更改時自動刷新。
  • 消息驅動能力: Spring Cloud Stream爲微服務應用構建消息驅動能力。阿里雲對象存儲:阿里雲提供的海量、安全、低成本、可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • 分佈式任務調度: 提供秒級、精準、可靠可用的定時(基於Cron表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有Worker (schedulerx- client). 上執行。
  • 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

二. Nacos安裝

前四個字母分別爲Naming和Configuration的前兩個字母,最後的s爲Service。

Nacos就是註冊中心+配置中心的組合 Nacos=Eureka+Config+Bus

Nacos:官網下載地址

下載解壓後,找到nacos/bin目錄下的startup.cmd命令點開
在這裏插入圖片描述
在這裏插入圖片描述
默認的賬號密碼都是 nacos,進入local:8848/nacos就可以進入我們的控制檯
在這裏插入圖片描述

三. Nacos做服務註冊中心 9001項目

首先你的父POM一定要有Springcloud-Alibaba依賴
在這裏插入圖片描述

3.1 項目目錄

在這裏插入圖片描述

3.2 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.aiguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-provider-payment9001</artifactId>

    <!--本pom.xml引入nacos-->
    <dependencies>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

3.3 application.yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'  #監控

3.4 主啓動

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class,args);
    }
}

3.5 業務類

controller層
package com.atguigu.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "nacos registry,serverPort: "+ serverPort+"\t id"+id;
    }

}

3.6 測試

首先來測試方法,可以訪問到
在這裏插入圖片描述
這時候我們來訪問Nacos的UI界面,發現服務已經註冊上來
在這裏插入圖片描述
點開詳情可以看見更多信息
在這裏插入圖片描述

四. 集羣測試

4.1 配置集羣(偷懶的辦法~)

在這裏插入圖片描述
這時候可以從已經配置過的9001複製一份模板來
在這裏插入圖片描述
這時候我們啓動9011服務
在這裏插入圖片描述

4.2 測試

打開我們的Nacos控制檯發現實例數量爲2
在這裏插入圖片描述
測試方法9001
在這裏插入圖片描述
測試方法9011
在這裏插入圖片描述

4.3 爲了更好演示集羣,這裏還是重新創建一個9002項目

4.3.1 項目目錄

基本與9001一樣,只是端口號不一樣,所以以下只貼出步驟,不演示(一模一樣的還讓我演示?orz)
在這裏插入圖片描述

4.3.2 建pom
4.3.3 application.yml
4.3.4 主啓動
4.3.5 業務類(controller層)
4.3.6 測試

在這裏插入圖片描述

五. 新建module cloudalibaba-consumer-nacos-order83

Nacos天生支持負載均衡因爲依賴引入了ribbon
在這裏插入圖片描述

5.1 項目目錄

在這裏插入圖片描述

5.2 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.aiguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-consumer-nacos-order83</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.aiguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

5.3 application.yml

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

#消費者將要去訪問的微服務名稱(成功註冊進nacos的微服務提供者),在這配置了訪問的服務,業務類就不用在定義常量了
service-url:
  nacos-user-service: http://nacos-payment-provider

5.4 主啓動類

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
    public static void main(String[] args) {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

5.5 業務類

controller層

package com.atguigu.springcloud.alibaba.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class OrderNacosController {
    /*
    因爲在yml中配置了service-url.nacos-user-service,
    這裏不需要再定義要訪問微服務名常量,而是通過boot直接讀出來
     */
    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id){
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }
}

5.6 測試

這裏我們在Nacos看見消費者已經註冊進來了
在這裏插入圖片描述
這時我們來測試負載均衡,訪問controller層方法一次是9001,一次是9002,負載均衡測試成功!
在這裏插入圖片描述
在這裏插入圖片描述

六. 總結

組件名 語言 CAP 服務監控檢查 對外暴露接口 Springcloud集成
Eureka Java AP 可配支持 HTTP 已集成
Consul Go CP 支持 HTTP/DNS 已集成
Zookeeper Java CP 支持 客戶端 已集成
Nacos Java AP/CP 支持 HTTP/DNS/UDP 已集成

Nacos確實比較方便而且功能強大!下一篇會講Nacos作爲服務配置中心~

關注不迷路,點贊走一波~ 轉載請標註~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章