动态

详情 返回 返回

nacos基礎使用模板(註冊中心、配置中心) - 动态 详情

Nacos是阿里巴巴的產品,現在是SpringCloud中的一個組件。Nacos本身就是一個單獨的軟件,需要下載並且安裝,下載好後在nacos文件bin文件夾中cmd命令 startup.cmd -m standalone 進行單體啓動(nacos默認集羣啓動),彈出naocs圖標以及對應的登錄頁信息則啓動成功,進入頁面登錄即可 賬號 密碼默認都為 nacso

1 註冊中心

一、基本使用

在父工程中引入spring-cloud-alilbaba的管理依賴

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

在微服務中引入nacos客户端依賴

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

在微服務的application.yml文件中添加nacos的配置文件

spring:
  application:
    name: xx-xxx-service # 應用名稱
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 #這裏填寫註冊服務地址

啓動naocs 登錄後查看是否有對應的服務註冊列表
一點要在服務類中寫個測試接口,只有spring啓動類的空項目註冊列表不顯示!!!

二、Nacos服務分級存儲模型

Nacos服務分級為 一級 服務名 二級 服務實例集羣 三級 服務實例
設置服務實例對應的集羣 配置文件中添加discovery相關的配置

spring:
  application:
    name: xx-xxx-service # 應用名稱
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 #這裏填寫註冊服務地址
      discovery:  
        cluster-name: HZ # 配置集羣名稱,也就是機房位置,例如:HZ,杭州

三、Nacos與Ribbon

Nacos中配置ribbon相關配置為

userservice:  #服務提供者服務名
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規則

該負載均衡規則默認現在同一集羣中尋找服務提供者實例,沒有再在不同的集羣中尋找服務列表,再隨機選擇某個服務實例
這樣的好處:同一集羣一般都在同一地點,響應時間更快
也可手動再Nacos中給每個服務實例配置權重來使某個實例使用機率更高或更低,權重值在0~1之間,越高選中概率越高,0則完全不會被選中

三、Nacos的環境隔離

Nacos中服務存儲和數據存儲的最外層都是一個名為namespace的東西,用來做最外層隔離
Nacos中可用通過不同的命名空間把微服務分成不同的組,組與組之間無法相互調用

Nacos新增命名空間流程:




修改配置文件

spring:
   cloud:
     nacos:
       server-addr: localhost:8848
       discovery:
         cluster-name: SH # 上海
         namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填ID

四、臨時實例與非臨時實例

區別:臨時實例宕機時,會從nacos的服務列表中剔除,而非臨時實例則不會
臨時實例Naocs採用心跳檢測是否掛了,非臨時實例Nacos主動詢問監測是否掛了

配置非臨時實例方式:修改配置文件為:

spring:
   cloud:
     nacos:
       discovery:
         ephemeral: false # 設置為非臨時實例

五、與EUREKA比較

Nacos與eureka的共同點:

都支持服務註冊和服務拉取,消費者垃取服務提供者列表緩存,每30秒拉取更新一次
都支持服務提供者心跳方式做健康檢測

Nacos與Eureka的區別:

Nacos支持服務端主動檢測提供者狀態:臨時實例採用心跳模式,非臨時實例採用主動檢測模式
臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
Nacos支持服務列表變更的消息推送模式,服務提供者變更後會再主動推送消息給消費者,服務消費者的服務列表更新更及時
Nacos集羣默認採用AP方式,當集羣中存在非臨時實例時,採用CP模式;Eureka採用AP方式

2 配置中心

nacos可以作為配置中心使用,達到多實例的配置同步,優先級是:

一 nacos配置中心基礎使用

naocs操作:

Data ID規則 服務名-環境.文件後綴

項目操作:

服務模塊增加依賴

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

增加一個bootstrap.yml配置文件,裏面主要nacos相關配置,他優先級高於application.yml,使我們項目啓動時取拉取nacos中的配置文件
bootstrap.yml中配置:

spring:
  application:
    name: userservice # 服務名稱
  profiles:
    active: dev #開發環境,這裏是dev
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件後綴名

這個配置文件就有優先在nacos中尋找userservice-dev.yaml的配置文件
application.yml中配置

server:
  port: 9999 #端口

測試代碼:

@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternConfig {
    private String  dateformat;

    public String getDateformat() {
        return dateformat;
    }

    public void setDateformat(String dateformat) {
        this.dateformat = dateformat;
    }
}


@RestController
@RequestMapping("/hello")
public class hello {

    @Autowired
    private PatternConfig patternConfig;

    @GetMapping("/test")
    private String test(){
        return patternConfig.getDateformat();
    }
}

nacos中的測試配置:

使用@ConfigurationProperties注入的配置文件是可以熱更新的

二 nacos配置中心配置文件多環境共享、多服務共享

多環境共享:
服務名-環境.文件後綴(如:userservice-dev.yml) 只能對應環境使用 服務名.文件後綴 全環境都可使用(如:userservice.yml),優先級 [服務名]-[環境].yaml >[服務名].yaml > 本地配置,所以,只需要把要共享的配置放在服務名.yaml中就可以多環境共享
多服務共享:
方式一:

spring:
   application:
     name: userservice # 服務名稱
   profiles:
     active: dev # 環境,
   cloud:
     nacos:
       server-addr: localhost:8848 # Nacos地址
       config: 
         file-extension: yaml # 文件後綴名
         shared-configs: # 多微服務間共享的配置列表
           - dataId: common.yaml # 要共享的配置文件id

手動配置 dataId: xxx.yaml

方式二:

spring:
   application:
     name: userservice # 服務名稱
   profiles:
     active: dev # 環境,
   cloud:
    nacos:
       server-addr: localhost:8848 # Nacos地址
       config:
         file-extension: yaml # 文件後綴名
         extends-configs: # 多微服務間共享的配置列表
           - dataId: extend.yaml # 要共享的配置文件id

手動配置 dataId: xxx.yaml

user avatar u_16297326 头像 seazhan 头像 AmbitionGarden 头像 u_15702012 头像 huangxunhui 头像 nianqingyouweidenangua 头像 chenjiabing666 头像 devlive 头像 gvison 头像 chengxy 头像 changqingdezi 头像 xiaoxiansheng_5e75673e1ae30 头像
点赞 23 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.