Nacos-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為管城等服務(wù)建站,管城等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為管城企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一、什么是 Alibaba Nacos

二、Nacos的基本使用

1.Nacos的安裝

2.Nacos服務(wù)注冊發(fā)現(xiàn)相關(guān)API

3.Nacos 集成Spring Boot實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)

三、Dubbo 使用Nacos實現(xiàn)注冊中心

四、Spring Cloud Alibaba Nacos Discovery

1.完成服務(wù)注冊與發(fā)現(xiàn)功能

2.服務(wù)端開發(fā)

3.消費端開發(fā)

五、Nacos注冊中心的實現(xiàn)原理

1.服務(wù)注冊的功能主要體現(xiàn):

2.原理步驟

六、Nacos配置中心的簡單使用

1.簡介

2.Nacos集成Spring Boot實現(xiàn)統(tǒng)一配置管理

七、Spring Cloud Alibaba Nacos Config

1.在Spring Cloud生態(tài)下Nacos Config的使用步驟

2.動態(tài)更新配置

3.基于Data ID配置YAML的文件擴展名

4.不同環(huán)境的配置切換

5.Nacos Config 自定義 Namespace 和 Group

Namespace

Group

八、Nacos Config實現(xiàn)原理

1.Nacos Config針對配置管理提供了4種操作

2.配置的存儲

3.動態(tài)監(jiān)聽之Pull OR Push

Pull

Push

Nacos的監(jiān)聽機制


一、什么是 Alibaba Nacos

Nacos 致力于解決微服務(wù)中的統(tǒng)一配置、服務(wù)注冊與發(fā)現(xiàn)等問題。它提供了一組簡單易用的特性集,幫助開發(fā)者快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。

Nacos的關(guān)鍵特性如下:

  • 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測:Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)。服務(wù)提供者注冊Service后,服務(wù)消費者可以使用DNS或HTTP&API查找和發(fā)現(xiàn)服務(wù)。? Nacos提供對服務(wù)的實時的健康檢查,阻止向不健康的主機或服務(wù)實例發(fā)送請求。
  • 動態(tài)配置服務(wù)
  • 動態(tài)DNS服務(wù):支持權(quán)重路由,讓開發(fā)者更容易實現(xiàn)中間層負載均衡
  • 服務(wù)及元數(shù)據(jù)管理
二、Nacos的基本使用 1.Nacos的安裝

Nacos支持三種部署模式:單機、集群、多集群;

需要注意:Nacos依賴Java環(huán)境,并且要求使用JDK1.8以上版本;

Nacos的安裝方式有兩種:源碼安裝、使用已編譯好的安裝包;

以下舉例為源碼安裝:

  1. 在 https://github.com/alibaba/nacos/releases 上下載當前Nacos的最新版本(1.1.4)
  2. 解壓進入根目錄,執(zhí)行 mvn -Prelease-nacos clean install -U 構(gòu)建,構(gòu)建后會創(chuàng)建一個distribution目錄
  3. 執(zhí)行 cd?distribution/target/nacos-server-$version/nacos/bin
  4. 執(zhí)行 sh startup.sh -m standalone,啟動服務(wù)
  5. 服務(wù)啟動后,可以通過http://127.0.0.1:8848/nacos 訪問Nacos的控制臺。控制臺主要用于增強對服務(wù)列表、健康狀態(tài)管理、服務(wù)治理、分布式配置管理等方面的管控能力?
2.Nacos服務(wù)注冊發(fā)現(xiàn)相關(guān)API

Nacos提供了SDK及Open API的方式來完成服務(wù)注冊與發(fā)現(xiàn)等操作,SDK本質(zhì)上是對HTTP請求的封裝

  • 注冊實例:將服務(wù)地址信息注冊到 Nacos Server

Open API:?/nacos/v1/ns/instance (POST)

SDK:

void? registerInstance(String serviceName,String ip,int port) throws NacosException;

void? registerInstance(String serviceName,String ip,int port,String clusterName) throws NacosException;

void? registerInstance(String serviceName,Instance instance) throws NacosException;

參數(shù)說明:

serviceName:服務(wù)名稱

ip:服務(wù)實例IP

port:服務(wù)實例Port

clusterName:集群名稱,表示該服務(wù)實例屬于哪個集群

instance:實例屬性,實際上就是把上面這些參數(shù)封裝成一個對象

調(diào)用方式:

NamingService? naming

=NamingFactory.createNamingService(System.getProperty("serveAddr"));

naming.registerInstance("nacos_test","192.168.1.1","8080","DEFAULT");

  • 獲取全部實例:根據(jù)服務(wù)名稱從Nacos Server上獲取所有服務(wù)實例

Open?API:/nacos/v1/ns/instance/list (GET)

SDK:

ListgetAllInstances(String serviceName) throws NacosException;

ListgetAllInstances(String serviceName,Listclusters) throws NacosException;

參數(shù)說明:

serviceName:服務(wù)名稱

cluster:集群列表,可以傳遞多個值

調(diào)用方式:

NamingService? naming

=NamingFactory.createNamingService(System.getProperty("serveAddr"));

naming.getAllInstances("nacos_test",true);

  • 監(jiān)聽服務(wù):監(jiān)聽服務(wù)下的實例變化,監(jiān)聽服務(wù)機制可以讓客戶端及時感知服務(wù)提供者實例變化

Open API:/nacos/v1/ns/instance/list (GET)

SDK:

void subscribe (String serviceName,EventListener listener) throws NacosException;

void subscribe (String serviceName,Listclusters,EventListener listener) throws NacosException;

參數(shù)說明:

EventListener:當服務(wù)提供者實例發(fā)生上、下線時,會觸發(fā)一個事件回調(diào)

服務(wù)監(jiān)聽有兩種方式:

第一種是客戶端調(diào)用/nacos/v1/ns/instance/list 定時輪詢。

第二種是基于 DatagramSocket的UDP協(xié)議,實現(xiàn)服務(wù)端的主動推送。

3.Nacos 集成Spring Boot實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)

通過Spring Boot集成Nacos實現(xiàn)一個簡單的服務(wù)注冊與發(fā)現(xiàn)功能

  • 創(chuàng)建一個Spring Boot工程spring-boot-nacos-discovery
  • 添加Maven依賴 (nacos-discovery-spring-boot-starter(0.2.4))
  • 創(chuàng)建DiscoveryController類,通過@NacosInjected注入Nacos的NamingService,并提供discovery方法,可以根據(jù)服務(wù)名稱獲得注冊到Nacos上的服務(wù)地址
  • 在application.properties中添加Nacos服務(wù)地址的配置 (nacos.discovery.server-addr=127.0.0.1:8848)
  • 啟動啟動類,調(diào)用curl http://127.0.0.1:8080/discovery?serviceName=example去Nacos服務(wù)器上查詢服務(wù)名稱為example所對應(yīng)的地址信息,如果沒有example的服務(wù)實例,返回一個空的JSON數(shù)組,如果有返回一個數(shù)組包含對象的信息。
三、Dubbo 使用Nacos實現(xiàn)注冊中心
  • 創(chuàng)建一個普通Maven項目spring-boot-dubbo-nacos-sample,添加兩個模塊:nacos-sample-api和nacos-sample-provider(是一個Spring Boot工程)
  • 在nacos-sample-api 中聲明接口??
  • 在nacos-sample-provider中添加如下依賴

nacos-sample-api,接口定義類的依賴

nacos-discovery-spring-boot-starter,Nacos的Starter組件

dubbo-spring-boot-starter ,Dubbo的Starter組件,添加Dubbo依賴

  • 創(chuàng)建類并實現(xiàn)api中的接口
  • 修改application.properties配置,僅將dubbo.registry.address中配置的協(xié)議改成nacos://127.0.0.1:8848,基于nacos協(xié)議

dubbo.application.name=spring-boot-dubbo-nacos-sample

dubbo.registry.address=nacos://127.0.0.1:8848

dubbo.protocol.name=dubbo

dubbo.protocol.port=20880

  • 運行Spring Boot啟動類,在啟動來上需要聲明注解@DubboComponentScan
  • 服務(wù)啟動成功之后,訪問Nacos控制臺,進入服務(wù)管理-服務(wù)列表,可以看到所有注冊在Nacos上的服務(wù)。
四、Spring Cloud Alibaba Nacos Discovery

Nacos作為Spring Cloud Alibaba中服務(wù)注冊與發(fā)現(xiàn)的核心組件,可以很好的幫助開發(fā)者將服務(wù)自動注冊到Nacos服務(wù)端,并且能夠動態(tài)感知和刷新某個服務(wù)實例的服務(wù)列表。

1.完成服務(wù)注冊與發(fā)現(xiàn)功能

將Spring Cloud Alibaba Nacos Discovery集成到Spring Cloud Alibaba Dubbo,代碼如下

2.服務(wù)端開發(fā)
  • 創(chuàng)建一個普通的Maven項目spring-cloud-nacos-sample,在項目中添加兩個模塊
  • spring-cloud-nacos-sample-api,暴露服務(wù)接口,作為服務(wù)提供者及服務(wù)消費者的接口契約
  • spring-cloud-nacos-sample-provider,項目類型為Spring Cloud,它是接口的實現(xiàn)
  • 在spring-cloud-nacos-sample-api中定義一個接口
  • spring-cloud-nacos-sample-provider項目的pom.xml文件中添加相關(guān)依賴包,如下

spring-cloud-starter:Spring Cloud核心包??

spring-cloud-starter-dubbo:引入Spring Cloud Alibaba Dubbo

spring-cloud-dubbo-sample-api:API的接口聲明

spring-cloud-alibaba-nacos-discovery:基于Nacos的服務(wù)注冊與發(fā)現(xiàn)

spring-cloud-context (2.1.1.RELEASE)

注意:spring-cloud-starter、spring-cloud-alibaba-nacos-discovery由于版本沖突,需要用exclusion標簽排除掉spring-cloud-context子包,在pom文件中重新引回2.1.1版本的spring-cloud-context

  • 在spring-cloud-nacos-sample-provider中創(chuàng)建接口的實現(xiàn)類,@Service是Dubbo服務(wù)的注解,表示當前服務(wù)會發(fā)布成一個遠程服務(wù)
  • 在application.properties中提供Dubbo及Nacos的配置,用于聲明Dubbo服務(wù)暴露的網(wǎng)絡(luò)端口和協(xié)議,以及服務(wù)注冊的地址信息

spring.application.name=spring-cloud-nacos-sample

dubbo.scan.base-packages=com.gupaoedu.book.nacos.bootstrap? 備注:功能等同于@DubboComponentScan,指定Dubbo服務(wù)實現(xiàn)類的掃描包路徑

dubbo.protocol.name=dubbo

dubbo.protocol.port=20880

dubbo.registry.address=spring-cloud://localhost? 備注:Dubbo服務(wù)注冊中心的配置地址,它的值spring-cloud://localhost表示掛載到Spring Cloud注冊中心,不配置的話會提示沒有配置注冊中心的錯誤

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848? ?備注:Nacos服務(wù)注冊中心的地址

  • 啟動服務(wù):進入Nacos控制臺的服務(wù)管理-服務(wù)列表會看到服務(wù)注冊上來
3.消費端開發(fā)
  • 創(chuàng)建一個Spring Boot項目 spring-cloud-nacos-consumer
  • 添加相關(guān)依賴如下

spring-boot-starter-web :演示需要就加不然不用加

spring-cloud-starter

spring-cloud-starter-dubbo

spring-cloud-nacos-sample-api

spring-cloud-alibaba-nacos-discovery

  • 在application.properties中添加配置信息

dubbo.cloud.subscribed-services=spring-cloud-nacos-sample

dubbo.scan.base-packages=com.gupaoedu.book.nacos.bootstrap??

spring.application.name=spring-cloud-nacos-consumer

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848? ?

  • 定義Controller類,@Reference注解,將遠程訪問類引入進來
  • 啟動服務(wù)
五、Nacos注冊中心的實現(xiàn)原理 1.服務(wù)注冊的功能主要體現(xiàn):
  • 服務(wù)實例在啟動時注冊到服務(wù)注冊表,并在關(guān)閉時注銷
  • 服務(wù)消費者查詢服務(wù)注冊表,獲得可用實例
  • 服務(wù)注冊中心需要調(diào)用服務(wù)實例的健康檢查API來驗證它是否能夠處理請求
2.原理步驟
  1. 服務(wù)提供方使用Open API發(fā)起服務(wù)注冊
  2. Nacos Server與服務(wù)提供方建立心跳機制,檢查服務(wù)狀態(tài)
  3. 服務(wù)消費者從Nacos Server查詢服務(wù)提供方實例列表
  4. 服務(wù)消費者開啟定時任務(wù),每10秒從Nacos Server拉取一次數(shù)據(jù)
  5. 檢測到服務(wù)提供者異常,Nacos Server基于UDP協(xié)議向服務(wù)消費者推送更新
  6. 服務(wù)消費者通過Dubbo 遠程通信鏈接服務(wù)提供方
六、Nacos配置中心的簡單使用 1.簡介

Nacos的架構(gòu)圖中有兩個模塊,分別是Config Server和Naming Server。Naming Server是實現(xiàn)注冊中心的核心模塊,Config Server是Nacos用于實現(xiàn)配置中心的核心模塊,它實現(xiàn)了對配置的CRUD、版本管理、灰度管理、監(jiān)聽管理、推送軌跡、聚合數(shù)據(jù)等功能。

2.Nacos集成Spring Boot實現(xiàn)統(tǒng)一配置管理

Nacos是一個獨立組件,它可以獨立部署和應(yīng)用,在集成到Spring Cloud之前,可以結(jié)合Spring Boot來實現(xiàn)統(tǒng)一配置管理

  • 創(chuàng)建一個Spring Boot工程spring-boot-nacos-config
  • 添加Nacos Config的Jar包依賴? (nacos-config-spring-boot-starter)
  • 在application.properties中添加Nacos Server地址? (nacos.config.server-addr=127.0.0.1:8848)
  • 創(chuàng)建Controller類,可以從Nacos Server讀取配置,用到以下兩個注解

@NacosPropertySource(dataId="example",autoRefreshed=true)

注釋:用于加載dataId為example的配置源,autoRefreshed表示開啟自動更新

@NacosValue(value="${info:Local Hello World}",autoRefreshed=true)

注釋:設(shè)置屬性的值,其中info表示key,而Local Hello World代表默認值。也就是說如果key不存在,則使用默認值。

  • 啟動Nacos Server:進入 ${NACOS_HOME}\bin目錄,執(zhí)行sh startup.sh啟動Nacos Server
  • 創(chuàng)建配置:有兩種方式? ?1.在Nacos控制臺上創(chuàng)建? ?2.使用Open API方式創(chuàng)建

控制臺創(chuàng)建方式:通過http://ip:8848/nacos控制臺進入 配置管理-配置列表,單擊創(chuàng)建按鈕進入創(chuàng)建界面。Data ID:表示Nacos中某個配置集的ID;Group:表示配置所屬的分組;配置格式:當前配置內(nèi)容所遵循的格式。

注意:dataId和group必須與NacosPropertySource中配置保持一致,否則無法匹配到配置內(nèi)容

  • 啟動Spring Boot項目的啟動類,執(zhí)行訪問命令,就能獲取到配置的內(nèi)容
七、Spring Cloud Alibaba Nacos Config 1.在Spring Cloud生態(tài)下Nacos Config的使用步驟
  • 創(chuàng)建Spring Boot項目,添加spring-cloud-starter依賴
  • 添加Jar包依賴? (spring-cloud-starter-alibaba-nacos-config)
  • 創(chuàng)建bootstrap.properties文件,在其中添加Nacos Server的連接地址,如下

spring.application.name=spring-cloud-nacos-config-sample

spring.cloud.nacos.config.server-addr=127.0.0.1:8848? 注釋:設(shè)置Nacos配置中心地址

spring.cloud.nacos.config.prefix=example? ?注釋:表示Nacos配置中心的Data ID的前綴

注:在Spring Boot中有兩種上下文配置,一種是bootstrap,一種是application。bootstrap是父上下文,也就是說bootstrap加載優(yōu)先于application。由于在加載遠程配置之前,需要讀取Nacos配置中心的服務(wù)地址信息,所以Nacos服務(wù)地址等屬性配置需要放在bootstrap.properties文件中

  • 在Nacos Console中創(chuàng)建如下配置

DataId:example

Group:DEFAULT_GROUP

配置內(nèi)容:info=Nacos Server Data : Hello World

  • 在啟動類中,讀取配置中心的數(shù)據(jù)

ConfigurableApplicationContext?context=

?SpringApplication.run(SpringCloudNacosConfigSampleApplication.class,args);

String info=context.getEnvironment().getProperty("info");

注:從Environment中讀取配置,info為得到的配置數(shù)據(jù)

2.動態(tài)更新配置

配置中心必然需要支持配置的動態(tài)更新,也就是在配置中心上修改配置的值之后,應(yīng)用程序需要感知值的變化。

3.基于Data ID配置YAML的文件擴展名

Spring Cloud Alibaba Nacos Config從Nacos Config Server中加載配置時,會匹配Data ID。

Data ID默認規(guī)則是:${prefix}-${spring.profile.active}.${file-extension}。

在實際應(yīng)用中,如果用YAML格式的配置,Nacos Server也提供了YAML配置格式的支持,步驟如下:

  • 在bootstrap.properties中聲明spring.cloud.nacos.config.file-extension=yaml
  • 在Nacos控制臺上增加如下配置

Data ID:spring-cloud-nacos-config-sample.yaml

Group:DEFAULT_GROUP

配置格式:YAML

配置內(nèi)容:info:yaml config type

  • 運行啟動后,就能獲得到配置內(nèi)容
4.不同環(huán)境的配置切換

在Spring Boot中,可以基于spring.profiles.active實現(xiàn)不同環(huán)境的配置切換。比如:開發(fā)環(huán)境、測試環(huán)境、預(yù)生產(chǎn)環(huán)境、生產(chǎn)環(huán)境。具體切換步驟如下:

  • 在resources目錄下根據(jù)不同環(huán)境創(chuàng)建不同的配置:application-dev.properties;application-test.properties;application-prod.properties
  • 定義一個application.properties默認配置,在該配置中通過spring.profiles.active=${env}來指定當前使用哪個環(huán)境的配置,如果${env}的值為prod,表示使用application-prod.properties。也可以使用VM options=-Dspring.profiles.active=prod來指定使用的配置環(huán)境。
  • 在bootstrap.properties中聲明spring.profiles.active=prod。
  • 在Nacos控制臺上新增兩個Data ID的配置項。

spring-cloud-nacos-config-sample-test.properties,配置內(nèi)容為info-test

spring-cloud-nacos-config-sample-prod.properties,配置內(nèi)容為info=prod env:Hello

  • 運行啟動方法,會得到prod下配置的內(nèi)容
5.Nacos Config 自定義 Namespace 和 Group

Nacos Config中默認的行為?Namespace:public;Group:DEFAULT_GROUP?

Namespace

用于解決多環(huán)境及多租戶數(shù)據(jù)的隔離問題,比如在多套不同的環(huán)境下,可以根據(jù)指定的環(huán)境創(chuàng)建不同的Namespace,實現(xiàn)多環(huán)境隔離。或者多用戶的場景中,每個用戶可以維護自己的Namespace,實現(xiàn)每個用戶的配置數(shù)據(jù)和注冊數(shù)據(jù)的隔離。

需要注意的是:在不同的Namespace下,可以存在相同的Group和DataId

操作:

  • 在Nacos控制臺的命名空間下,創(chuàng)建一個命名空間。
  • 在bootstrap.properties中添加配置:spring.cloud.nacos.namespace=ee6d2c78-003b-4151-9984-63b1b40111a0(命名空間ID,在Nacos界面可以獲?。?/li>
Group

是Nacos中用來實現(xiàn)Data ID分組管理的機制,它可以實現(xiàn)不同Service/DataId的隔離

操作:不需要提前創(chuàng)建,只需要在創(chuàng)建的時候指定

  • 在Nacos控制臺 新建配置界面中指定配置所屬的Group
  • 在bootstrap.properties中添加配置:spring.cloud.nacos.config.group=TEST_GROUP
八、Nacos Config實現(xiàn)原理 1.Nacos Config針對配置管理提供了4種操作
  • 獲取配置:從Nacos Config Server中讀取配置

SDK:public? String getConfig(String dataId,String group,long timeoutMs)

throws NacosException;

API(GET): /nacos/v1/cs/configs

  • 監(jiān)聽配置:訂閱感興趣的配置,當配置發(fā)生變化時可以收到一個事件

SDK:public? void? addListener(String dataId,String group,Listener listener);

API(POST):/nacos/v1/cs/configs/listener

  • 發(fā)布配置:將配置保存到Nacos Config Server中

SDK:public boolean publishConfig(String dataId,String group,String content)

? throws NacosException;

API(POST):/nacos/v1/cs/configs

  • 刪除配置:刪除配置中心的指定配置

SDK:public boolean removeConfig(String dataId,String group) throws NacosException;

API(DELETE):/nacos/v1/cs/configs

2.配置的存儲

Nacos服務(wù)端的數(shù)據(jù)存儲默認采用的是Deaby數(shù)據(jù)庫,除此之外,還支持MySQL數(shù)據(jù)庫。

3.動態(tài)監(jiān)聽之Pull OR Push Pull

表示客戶端從服務(wù)端主動拉取數(shù)據(jù)?

優(yōu)缺點:在Pull模式下,客戶端需要定時從服務(wù)端拉取一次數(shù)據(jù),由于定時任務(wù)會存在一定的時間間隔,所以不能保證數(shù)據(jù)的實時性,并且在服務(wù)端配置長時間不更新的情況下,客戶端的定時任務(wù)會做一些無效的Pull

Push

表示服務(wù)端主動把數(shù)據(jù)推送給客戶端

優(yōu)缺點:在Push模式下,服務(wù)端需要維持與客戶端的長鏈接,如果客戶端的數(shù)量比較多,那么服務(wù)端需要耗費大量的內(nèi)存資源來保存每個連接,并且為了保證連接的有效性,還需要心跳機制來維持每個連接的狀態(tài)。

Nacos的監(jiān)聽機制

Nacos采用的是Pull模式,但不是簡單的Pull模式,而是一種長輪詢機制??蛻舳瞬捎瞄L輪詢的方式定時發(fā)起Pull請求,去檢查服務(wù)端配置信息是否發(fā)生了變化:

  • 如果發(fā)生了變化,則客戶端會根據(jù)變更的數(shù)據(jù)獲取最新的配置;
  • 如果服務(wù)端的配置和客戶端的保持一致,那么服務(wù)端會先“Hold”住這個請求29.5秒,先不返回,如果這段時間內(nèi)配置發(fā)生變化,服務(wù)端會把原來Hold住的這個請求返回;
  • 如果時間到達29.5秒一直沒有變更,也會自動觸發(fā)一次檢查機制,耗時0.5秒后,不管有沒有變化都把結(jié)果返回給客戶端。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁題目:Nacos-創(chuàng)新互聯(lián)
路徑分享:http://www.muchs.cn/article14/hgcde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)搜索引擎優(yōu)化、域名注冊品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名