Nacos近期發佈了0.7.0版本,該版本支持對接第三方CMDB獲取CMDB數據、使用Selector機制來配置服務的路由類型、支持單機模式使用MySQL數據庫、上線Node.js客戶端,並修復了一些bug。node
在服務進行多機房或者多地域部署時,跨地域的服務訪問每每延遲較高,一個城市內的機房間的典型網絡延遲在1ms左右,而跨城市的網絡延遲,例如上海到北京大概爲30ms。此時天然而然的一個想法就是能不能讓服務消費者和服務提供者進行同地域訪問。mysql
Nacos定義了一個SPI接口,裏面包含了與第三方CMDB約定的一些方法。用戶依照約定實現了相應的SPI接口後,將實現打成jar包放置到Nacos安裝目錄下,重啓Nacos便可讓Nacos與CMDB的數據打通。git
參考 github.com/nacos-group…,這裏已經給出了一個示例plugin實現。
具體步驟以下:github
新建一個maven工程,引入依賴nacos-api:spring
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-api</artifactId>
<version>0.7.0</version>
</dependency>複製代碼
引入打包插件:sql
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>複製代碼
定義實現類,繼承com.alibaba.nacos.api.cmdb.CmdbService,並實現相關方法。數據庫
在src/main/resource/目錄下新建目錄:META-INF/servicesapache
在src/main/resources/META-INF/services目錄下新建文件com.alibaba.nacos.api.cmdb.CmdbService,並在文件裏將第三步中建立的實現類全名寫入該文件:api
代碼自測完成後,執行命令進行打包:bash
mvn package assembly:single -Dmaven.test.skip=true複製代碼
將target目錄下的包含依賴的jar包上傳到nacos CMDB插件目錄:
{nacos.home}/plugins/cmdb複製代碼
在nacos的application.properties裏打開加載插件開關:
nacos.cmdb.loadDataAtStart=true複製代碼
在控制檯上,對服務進行編輯,使用同機房優先策略:
這樣配置後,全部訪問該服務的消費者,都會實現同機房優先策略。
在0.7版本以前,在單機模式時nacos使用嵌入式數據庫實現數據的存儲,不方便觀察數據存儲的基本狀況。0.7版本增長了支持mysql數據源能力,具體的操做步驟:
安裝數據庫,版本要求:5.6.5+
初始化mysql數據庫,數據庫初始化文件:nacos-mysql.sql
修改application.properties文件,增長支持mysql數據源配置(目前只支持mysql),添加mysql數據源的url、用戶名和密碼。
spring.datasource.platform=mysql
db.num=2
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://11.163.152.9:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow複製代碼
再以單機模式啓動nacos
sh startup.sh -m standalone複製代碼
nacos全部寫嵌入式數據庫的數據都寫到了mysql
在 Java 版本客戶端推出以後,咱們一直思考多語言版本,在對多語言的調研中,Node.js 的呼聲是最高的,很多 Node.js 開發者都期盼着有原生的 Node.js 客戶端可使用。
現在咱們推出了初版客戶端,完成了常見的增刪改查功能,藉由此,向多語言化邁出了第一步。
以nacos-config爲例,下面是一個簡單的接入說明,具體接入能夠參考:github.com/nacos-group…
import {NacosConfigClient} from 'nacos'; // ts
const NacosConfigClient = require('nacos').NacosConfigClient; // js
// 下面的代碼是尋址模式
const configClient = new NacosConfigClient({
endpoint: 'acm.aliyun.com', // acm 控制檯查看
namespace: '***************', // acm 控制檯查看
accessKey: '***************', // acm 控制檯查看
secretKey: '***************', // acm 控制檯查看
requestTimeout: 6000, // 請求超時時間,默認6s
});
// 下面的代碼是直連模式
const configClient = new NacosConfigClient({
serverAddr: '127.0.0.1:8848', // 對端的 ip 和端口,其餘參數同尋址模式
});
// 主動拉取配置
const content= await configClient.getConfig('test', 'DEFAULT_GROUP');
console.log('getConfig = ',content);複製代碼