真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Alibaba之Nacos詳解-創(chuàng)新互聯(lián)

上個(gè)月最后一天的凌晨,Spring Cloud Alibaba 正式入駐了 Spring Cloud 官方孵化器,并在 maven 中央庫(kù)發(fā)布了第一個(gè)版本。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

目前 Spring Cloud Alibaba 還只能算是預(yù)覽版吧,里邊的坑肯定不少,不過我還是決定試試,看看 Alibaba 到底靠譜不靠譜。

Alibaba之Nacos詳解

一、Spring Cloud Alibaba

目前 Spring Cloud Alibaba 項(xiàng)目還處于 Spring Cloud 官方孵化器中,打開它 Github 的就能看到 “親切” 的中文文檔。

它目前只有三個(gè)組件:

  • Sentinel:把流量作為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。

  • Nacos:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。

  • AliCloud OSS: 阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱
    OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問任意類型的數(shù)據(jù)。

看官方路線圖上講后邊還會(huì)增加:

  • Dubbo:Apache Dubbo? (incubating) 是一款高性能 Java RPC 框架。

  • RocketMQ:Apache RocketMQ? 基于 Java 的高性能、高吞吐量的分布式消息和流計(jì)算平臺(tái)。

  • Schedulerx:阿里中間件團(tuán)隊(duì)開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,支持周期性的任務(wù)與固定時(shí)間點(diǎn)觸發(fā)任務(wù)。

  • AliCloud SLS:針對(duì)日志類數(shù)據(jù)的一站式服務(wù),在阿里巴巴集團(tuán)經(jīng)歷大量大數(shù)據(jù)場(chǎng)景錘煉而成。您無需開發(fā)就能快捷完成日志數(shù)據(jù)采集、消費(fèi)、投遞以及查詢分析等功能,提升運(yùn)維、運(yùn)營(yíng)效率,建立 DT 時(shí)代海量日志處理能力。

從數(shù)量上來看,Alibaba 的組件數(shù)量和目前 Netflix 的相比少了一多半,但是仔細(xì)看看各組件的功能描述,也就明白了。在沒真正上手之前,我個(gè)人先大膽猜測(cè)一下:

  • Nacos = Eureka/Consule + Config + Admin
  • Sentinel = Hystrix + Dashboard + Turbine
  • Dubbo = Ribbon + Feign
  • RocketMQ = RabbitMQ
  • Schedulerx = Quartz
  • AliCloud OSS、AliCloud SLS 這三個(gè)應(yīng)該是獨(dú)有的
    鏈路跟蹤(Sleuth、Zipkin)不知道會(huì)不會(huì)在 Sentinel 里
    以上只是猜測(cè),待我從坑里爬出來之后再回來更新。也歡迎大家一起交流探討~
    這里我就先試試 Nacos。

二、Nacos

Alibaba之Nacos詳解

這是 Nacos 的架構(gòu)圖,可以看到它確實(shí)是融合了服務(wù)注冊(cè)發(fā)現(xiàn)中心、配置中心、服務(wù)管理等功能,和我之前猜想的它是 Eureka/Consule + Config + Admin 的合體差不多。

另外通過官方文檔發(fā)現(xiàn),Nacos 除了可以和 Spring Cloud 集成,還可以和 Spring、SpringBoot 進(jìn)行集成。

不過我們只關(guān)注于 Spring Cloud,別的就略過了,直接上手吧~

工程的目錄結(jié)構(gòu)如下:

alibaba
├── nacos-config
│   ├── pom.xml
│   └── src
├── nacos-consumer
│   ├── pom.xml
│   └── src
├── nacos-provider
│   ├── pom.xml
│   └── src
└── pom.xml

首先引入 Spring Cloud Alibaba 的 BOM


    org.springframework.boot
    spring-boot-starter-parent
    2.0.4.RELEASE
    


    Finchley.SR2
    0.2.0.RELEASE


    
        
            org.springframework.cloud
            spring-cloud-alibaba-dependencies
            ${spring-cloud-alibaba.version}
            pom
            import
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
    

這里版本號(hào)有坑,文檔上說和 Spring Boot 2.0.x 版本兼容,但是實(shí)測(cè) 2.0.6.RELEASE 報(bào)錯(cuò)

java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

三、Nacos Server

在使用 Nacos 之前,需要先下載 Nacos 并啟動(dòng) Nacos Server。

Nacos Server 有兩種運(yùn)行模式:

  • standalone
  • cluster

不論哪種方式吧,都需要先去?https://github.com/alibaba/nacos/releases?下載最新的 release 包,然后解壓,以 nacos-server-0.4.0.zip 為例

unzip nacos-server-0.4.0.zip
cd nacos

1、standalone 模式

此模式一般用于 demo 和測(cè)試,不用改任何配置,直接敲以下命令執(zhí)行

sh bin/startup.sh -m standalone

Windows 的話就是

cmd bin/startup.cmd -m standalone

然后從?http://localhost:8848/nacos/index.html?進(jìn)入控制臺(tái)就能看到如下界面了

Alibaba之Nacos詳解

2、cluster 模式

集群模式需要依賴 MySQL,然后改兩個(gè)配置文件:

conf/cluster.conf
conf/application.properties

具體怎么改,在這里就先不展開了。我們先用 standalone 模式擼起來,享受 coding 的快感,然后再慢慢轉(zhuǎn)到 cluster 上邊。

四、配置管理

在 nacos/pom.xml 里添加依賴:


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-config
    

啟動(dòng)類不用修改:

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

修改 bootstrap.yml

spring:
  application:
    name: nacos
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848

注意:必須是寫在 bootstrap.yml 中,配置在 application.yml 中不行,啟動(dòng)報(bào)錯(cuò)

java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.name' in value "${spring.application.name}"

至于 bootstrap.yml 和 application.yml 的區(qū)別,之前講過這里就不贅述了。

添加一個(gè) Endpoint 便于觀察

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

注意一定要加@RefreshScope注解

小心!此處有坑!

這時(shí)候先別急著啟動(dòng) NacosConfigApplication 的,需要需要通過調(diào)用 Nacos Open API 往 Nacos Server 里發(fā)布一個(gè)配置。dataId 為 nacos.properties,內(nèi)容為useLocalCache=true

curl -X "POST" "http://127.0.0.1:8848/nacos/v1/cs/configs" \
     -H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
     --data-urlencode "dataId=nacos.properties" \
     --data-urlencode "group=DEFAULT_GROUP" \
     --data-urlencode "content=useLocalCache=true

dataId 的完整格式如下:

prefix?prefix?{spring.profile.active}.${file-extension}
  • prefix 默認(rèn)為?spring.application.name?的值,也可以通過配置項(xiàng) spring.cloud.nacos.config.prefix來配置。
  • spring.profile.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring >Boot 文檔。 注意:當(dāng) spring.profile.active 為空時(shí),對(duì)應(yīng)的連接符 - >也將不存在,dataId 的拼接格式變成 prefix.prefix.{file-extension}
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項(xiàng) spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。

然后啟動(dòng) NacosConfigApplication,從啟動(dòng)日志里能看到

Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos.properties'}]}

如果 propertySources 里邊是空的,那抱歉,你掉到坑里邊了。 如果你能看到之前發(fā)布的 dataId,那恭喜,請(qǐng)求?http://localhost:8080/config/get?就可以看到返回內(nèi)容 true 了。

再次調(diào)用 Nacos Open API 修改內(nèi)容為useLocalCache=false

再次訪問?http://localhost:8080/config/get?,此時(shí)返回內(nèi)容為false,說明程序中的useLocalCache值已經(jīng)被動(dòng)態(tài)更新了。

當(dāng)然,以上手動(dòng)調(diào)用 Nacos Open API 的方式也可以通過 Nacos Console 的可視化界面來操作

Alibaba之Nacos詳解

另外我們可以查詢配置的歷史記錄并能快速回滾

Alibaba之Nacos詳解

還能查詢到某個(gè)配置當(dāng)前的被監(jiān)聽狀態(tài)(這里的分頁(yè)有些 bug)

Alibaba之Nacos詳解

五、數(shù)據(jù)源

經(jīng)過了上邊的一些簡(jiǎn)單操作,我們已經(jīng)可以正常使用 Nacos 配置中心了。
但是不知道你有沒有想過:配置數(shù)據(jù)是存在哪里呢?

我們沒有對(duì) Nacos Server 做任何配置,那么數(shù)據(jù)只有兩個(gè)位置可以存儲(chǔ):

  • 內(nèi)存
  • 本地?cái)?shù)據(jù)庫(kù)

如果我們現(xiàn)在重啟剛剛在運(yùn)行的 Nacos Server,會(huì)發(fā)現(xiàn)剛才加的 nacos.properties 配置還在,說明不是內(nèi)存存儲(chǔ)的。

這時(shí)候我們打開NACOS_PATH/data,會(huì)發(fā)現(xiàn)里邊有個(gè)derby-data目錄,Derby 是 Java 編寫的數(shù)據(jù)庫(kù),屬于 Apache 的一個(gè)開源項(xiàng)目。我們的配置數(shù)據(jù)現(xiàn)在就存儲(chǔ)在這個(gè)庫(kù)中。

Derby 我并不是很熟悉,那能不能將數(shù)據(jù)源改為我們熟悉的 MySQL 呢?當(dāng)然可以了。

注意:不支持 MySQL 8.0 版本

這里我以本地運(yùn)行的 MySQL 為例:

創(chuàng)建一個(gè)名為nacos_config的 database

將NACOS_PATH/conf/nacos-mysql.sql中的表結(jié)構(gòu)導(dǎo)入剛才創(chuàng)建的庫(kù)中,這幾張表的用途就自己研究吧

修改NACOS_PATH/conf/application.properties,加入 MySQL 配置

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

創(chuàng)建cluster.conf,填入要運(yùn)行 Nacos Server 機(jī)器的 ip

192.168.100.155
192.168.100.156

我就是運(yùn)行個(gè) demo,沒有多余機(jī)器來組建集群怎么辦呢?

其實(shí)不用虛擬機(jī),直接只填一個(gè)本地地址也是可以的(僅限于配置管理,服務(wù)發(fā)現(xiàn)不行)。

這里有兩個(gè)坑:

Nacos Server 的數(shù)據(jù)源是用 Derby 還是 MySQL 完全是由其運(yùn)行模式?jīng)Q定的:

standalone 的話僅會(huì)使用 Derby,即使在 application.properties 里邊配置 MySQL 也照樣無視;
cluster 模式會(huì)自動(dòng)使用 MySQL,這時(shí)候如果沒有 MySQL 的配置,是會(huì)報(bào)錯(cuò)的。
官方提供的 cluster.conf 示例如下

#it is ip
#example
10.10.109.214
11.16.128.34
11.16.128.36

從習(xí)慣來看,這個(gè)#號(hào)后邊的應(yīng)該就是注釋的,但是抱歉哦,必須刪掉,否則下面的異常就撲面而來

Caused by: java.lang.NumberFormatException: For input string: "it is ip:0"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Long.parseLong(Long.java:589)
  at java.lang.Long.parseLong(Long.java:631)
  at com.alibaba.nacos.naming.core.DistroMapper.onServerStatusUpdate(DistroMapper.java:125)
  at com.alibaba.nacos.naming.core.DistroMapper.init(DistroMapper.java:100)
  at com.alibaba.nacos.naming.core.DistroMapper.(DistroMapper.java:65)
  ... 79 common frames omitted

以上配置結(jié)束后,運(yùn)行 Nacos Server 就能看到效果了。

除了 MySQL 的數(shù)據(jù)表發(fā)生了變化,我們會(huì)發(fā)現(xiàn)NACOS_PATH/data下的目錄結(jié)構(gòu)也發(fā)生了變化,多了config-data/DEFAULT_GROUP/nacos_config這么一個(gè)文件,里邊的內(nèi)容就是我們的配置

useLocalCache=true

這是容錯(cuò)呢?還是緩存呢?只有等看過源碼才知道了。

六、服務(wù)發(fā)現(xiàn)

服務(wù)注冊(cè)中心和服務(wù)發(fā)現(xiàn)的服務(wù)端都是由 Nacos Server 來提供的,我們只需要提供 Service 向其注冊(cè)就好了。

首先我們先將 Nacos Server 由偽分布式改為 standalone 模式,原因后邊再說吧。

這里模擬提供兩個(gè) service:provider 和 consumer

alibaba
├── nacos-provider
│   ├── pom.xml
│   └── src
└── nacos-consumer
│   ├── pom.xml
│   └── src
└── pom.xml

首先在 provider 和 consumer 的 pom 添加依賴


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.cloud
    spring-cloud-starter-alibaba-nacos-discovery

在兩者的 bootstrap.yml 中添加配置

1、provider

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 18080
consumer

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 18081

使用 Spring Cloud 的原生注解 @EnableDiscoveryClient 開啟服務(wù)發(fā)現(xiàn)

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

提供 Endpoint 以供訪問

@RestController
@RequestMapping("/echo")
public class EchoController {

    @RequestMapping(value = "/{string}", method = RequestMethod.GET)
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }
}

2、Consumer

在 NacosConsumerApplication 中集成 RestTemplate 和 Ribbon

@LoadBalanced
@Bean
public RestTemplate restTemplate() {
  return new RestTemplate();
}

提供 Controller

@RestController
@RequestMapping("/echo")
public class TestController {

    private final RestTemplate restTemplate;

    @Autowired
    public TestController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @RequestMapping(value = "/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String str) {
        return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
    }

}

分別啟動(dòng) NacosProviderApplication 和 NacosConsumerApplication ,調(diào)用?http://localhost:18080/echo/windmt?和?http://localhost:18081/echo/windmt?,返回內(nèi)容均為 Hello Nacos Discovery windmt,說明服務(wù)發(fā)現(xiàn)成功了。

這時(shí)候查看 Nacos Console 也能看到已注冊(cè)的服務(wù)列表及其詳情

Alibaba之Nacos詳解

Alibaba之Nacos詳解

現(xiàn)在來講一下為什么前邊要將 Nacos Server 由偽分布式再改為 standalone 模式。

單個(gè)節(jié)點(diǎn)的 Nacos Server 偽分布式在配置管理運(yùn)行的好好的,但是到了服務(wù)發(fā)現(xiàn),它就失效了。

通過 log 可以發(fā)現(xiàn)一些端倪,單節(jié)點(diǎn)的在選主的時(shí)候,無法正確選出 leader

==> logs/naming-raft.log <==
2018-11-13 16:38:56,424 INFO leader timeout, start voting,leader: null, term: 1

從而導(dǎo)致 Client 無法正常注冊(cè)

java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried
    at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:339) ~[nacos-client-0.3.0.jar:na]
    at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:272) ~[nacos-client-0.3.0.jar:na]
    at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:171) ~[nacos-client-0.3.0.jar:na]
    at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:161) ~[nacos-client-0.3.0.jar:na]
    ... ...

七、小結(jié)

當(dāng)今年年初 Dubbo 進(jìn)入 Apache 孵化器的時(shí)候,就有預(yù)感阿里要與 Spring Cloud 結(jié)緣。只是沒想到這么快。

如今 Spring Cloud Alibaba 已經(jīng)進(jìn)入了 Spring Cloud 官方孵化器,相信等不了多久也就能正式發(fā)布了。雖然大家在生產(chǎn)環(huán)境必然還不會(huì)這么快速地接入,但是總歸是多了一種選擇。

而 Nacos 作為微服務(wù)核心的服務(wù)注冊(cè)與發(fā)現(xiàn)中心,讓大家在 Eureka 和 Consule 之外有了新的選擇,開箱即用,上手簡(jiǎn)潔,暫時(shí)也沒發(fā)現(xiàn)有太大的坑。但將配置中心融合也融合進(jìn)來是好是壞,這個(gè)我先按下不表。

總而言之,Spring Cloud Alibaba 的入駐對(duì)于 Spring Cloud 生態(tài)總歸是好的~

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


網(wǎng)站題目:Alibaba之Nacos詳解-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/ihsjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部