91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java微服務新生代之Nacos

發布時間:2020-07-08 19:29:07 來源:網絡 閱讀:12683 作者:聞人的博客 欄目:編程語言

前言

從 2017 年底 Java 開發領域使用最廣的 RPC 框架 Dubbo 開啟重新更新維護之路開始,阿里巴巴為打造 Dubbo 微服務生態持續開源了 Sentinel,Nacos,Seata 等微服務中間件框架,并且推出了 Spring Cloud Alibaba 來提供微服務開發的一站式解決方案,阿里巴巴在 Java 社區持續活躍起來,也為 Java 微服務開發注入了新的活力。

本篇文章將重點學習微服務組件 Nacos 作為注冊中心的功能和用法,Nacos 是阿里巴巴于 2018 年 7 月份新開源的項目。

關于 Nacos 名字:前四個字母分別為 Naming 和 Configuration 的前兩個字母,最后的 s 為Service。

本文主要內容涉及如下:

  • Nacos 基本介紹
  • 為什么使用 Nacos
  • 最新版本 Nacos 與 Rest/Dubbo 服務的注冊與發現集成

關于 Nacos /nɑ:k??s/

一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。

上面這句話摘自 Nacos 官方首頁,是對 Nacos 整體功能的總結。

簡單來說 Nacos 就是注冊中心 + 配置中心的組合,提供簡單易用的特性集,幫助我們解決微服務開發必會涉及到的服務注冊與發現,服務配置,服務管理等問題。Nacos 還是 Spring Cloud Alibaba 組件之一,負責服務注冊與發現

首先來看下官方對 Nacos 的特性描述:

  • 服務發現和服務健康監測
  • 動態配置服務
  • 動態 DNS 服務
  • 服務及其元數據管理
  • 不斷新增...

可以發現所有特性都離不開服務這一詞,服務 (Service) 是 Nacos 世界中的一等公民,說明了服務是 Nacos 中最主要的角色。

為什么是 Nacos

現在的微服務生態中,已經有很多服務注冊與發現的開源組件,如 Eurka,ZooKeeper,Consul,為什么還要用 Nacos 呢,我們看下這些框架的簡單對比:

服務注冊與發現框架 CAP 模型 控制臺管理 社區活躍度
Eureka AP 支持 低 (2.x 版本閉源)
Zookeeper CP 不支持
Consul CP 支持
Nacos AP 支持

據說 Nacos 在阿里巴巴內部有超過 10 萬的實例運行,已經過了類似雙十一等各種大型流量的考驗。

相比之下,目前的 Nacos 無論是部署,還是使用上都簡單上手,更重要的是文檔資料齊全,社區活躍度高。

并且 Nacos 與目前主流的開源生態都提供了很好的支持:

  • Nacos 是專為 Dubbo 而生的注冊中心與配置中心
  • Nacos 會完全兼容 Spring Cloud
  • Nacos 支持 Service Mesh 集成,Kubernetes 集成

除此之外,阿里巴巴正在通過 Dubbo + Nacos 以及一系列開源項目打造服務發現、服務及流量管理、服務共享平臺,未來還在不斷地發展和演進,相信未來會有更多的地方上使用 Nacos。

Nacos 實戰

單機部署

準備環境

Nacos 依賴 Java 環境來運行,并且需要對 Nacos 代碼構建生成可執行程序時,還要有 Maven 環境,所以部署前需要保證環境要求:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+
  • Maven 3.2.x+
下載安裝

Java微服務新生代之Nacos

當前最新的 Nacos 版本為 1.0.1,Maven 方式打包后會在當前目錄 distribution/target 下生成兩個壓縮包 nacos-server-1.0.1.tar.gznacos-server-1.0.1.zip,任意解壓一個使用即可。

解壓運行

Java微服務新生代之Nacos

這里 Nacos 單機部署方式使用命令 -m standalone ,如果是 Windows 命令,可以直接雙擊 startup.cmd 文件即可。

Java微服務新生代之Nacos

當控制臺出現 Nacos 字母,并且出現 Nacos started successfully in stand alone mode 提示時就說明了 Nacos 服務端啟動成功,控制臺上也直接給出了當前可訪問的 Nacos 控制臺地址 http://{ip}:8848/nacos/index.html,點擊就進入了 Nacos 的可視化管理界面,需要賬號密碼登錄訪問,默認都為 nacos

Java微服務新生代之Nacos

登錄之后就能在網站側邊欄上看到 Nacos 的主要功能菜單:配置管理,服務管理,集群管理,命名空間。對于服務注冊與發現功能來說,我們只要看關注服務管理即可。

Java微服務新生代之Nacos

服務管理下目前只有一個名為服務列表的子菜單,展示的內容也比較簡單,包含服務名稱,組別,集群數目,總的實例數,運行中的實例數。

Java微服務新生代之Nacos

當有新的服務通過 Nacos 客戶端注冊到 Nacos 上時列表項就會增加,我們還可以通過操作欄的按鈕進行對服務的詳情查看和編輯。

集群部署

相比 Nacos 簡單的單機部署,集群部署方式稍微麻煩一些,跟著官方文檔走還是有點小坑,還需要自己額外的調整。 為了用于生產環境,必須確保 Nacos 的高可用,所以還是有必要實踐下集群部署的操作。

準備環境跟單機部署相同,額外的要求就是 Nacos 需要 3 個或 3 個以上 Nacos 節點構成集群,并且使用 MySQL 作為數據源,主要用于服務配置的數據持久化。

我們先看下官方推薦的集群部署架構圖,通過域名方式反向代理如 Nginx 來負載多個 Nacos 節點 IP,外部客戶端直接通過域名訪問就可,不僅可讀性好,而且更換 IP 方便,最為推薦采用。

Java微服務新生代之Nacos

添加集群配置文件

在每個 Nacos 節點的conf目錄下,添加配置文件 cluster.conf,可以參考相同目錄下的 cluster.conf.example 文件,每行配置一個節點的 IP 和端口,如 ip:port

Java微服務新生代之Nacos

注意:配置文件中不能使用 127.0.0.1 或者localhost ,需要真實 IP 或者域名,否則啟動后服務無法注冊到該集群節點上, 詳見NACOS ISSUE #1189 。

配置 MySQL 數據庫

Nacos 推薦生產環境中數據庫使用建議至少主備模式,或者采用高可用數據庫。

這里為了簡化只采用了一個數據庫。首先新建一個名為 nacos_config 的數據庫,使用提供的 sql 語句源文件 導入初始數據。

Java微服務新生代之Nacos

然后在每個 Nacos 節點的配置文件 conf/application.properties 里添加數據庫連接配置:

Java微服務新生代之Nacos

最后以集群模式分別啟動每個節點,并且默認為后臺啟動,啟動信息需要從 logs/logs/start.out日志文件中獲取。

Java微服務新生代之Nacos

當日志文件最后出現 Nacos started successfully in cluster mode. 一行時,即說明集群模式下 Nacos 啟動成功。這時,我們也可以通過登錄任一個 Nacos 控制臺的集群管理界面看到節點的信息。

Java微服務新生代之Nacos

可以從上面看到,集群下的 Nacos 節點狀態分為 FOLLOWERLEADER 兩種,跟我們熟悉的主從架構相似。

到這里,我們集群方式的搭建也完成了。接下我們就來看下如何使用 Nacos 進行服務注冊和發現吧。

實現服務的注冊與發現

Rest 服務的注冊與發現
服務提供者創建

創建一個子項目工程名為 rest-provider 的服務提供者項目,pom.xml 配置如下:

Java微服務新生代之Nacos

注意這里的 spring-cloud-starter-alibaba-nacos-discovery 版本為 0.9.0,采用的是 Nacos 1.0.0 版本的客戶端,而對應 Spring Boot 版本需要為 2.1.x.RELEASE 版本, 更多版本對應關系參考:版本說明 Wiki

Java微服務新生代之Nacos

因此我們使用 Spring Cloud Alibaba 最新版本 0.9.0.RELEASE,對應 Spring Cloud Greenwich 版本,父 Maven 項目 POM 配置需要添加如下依賴管理:

Java微服務新生代之Nacos

依賴添加之后,在引導類中實現一個 Rest 請求方法 /echo,并且通過 @EnableDiscoveryClient 注解表明是一個 Nacos 客戶端,而該注解是 Spring Cloud 提供的原生注解,就算切換成 Eureka 作為注冊中心也是用這個注解。

Java微服務新生代之Nacos

修改子項目配置文件 application.properties

Java微服務新生代之Nacos

  • spring.application.name 聲明了服務名稱
  • spring.cloud.nacos.discovery.server-addr 指定了 Nacos 注冊中心地址

Nacos Starter 更多配置項信息可以參考 Spring Cloud Alibaba Nacos Discovery

然后通過引導類 RestProviderApplication 運行項目,登錄 Nacos Server 控制臺,查看服務列表即可看到服務提供者 rest-provider 已經注冊成功。

Java微服務新生代之Nacos

服務消費者創建

同樣的方式我們創建一個服務消費者項目 rest-consumerpom.xml 依賴和 application.properties 配置與 provider-consumer 一樣, 這里我們顯式地使用 LoadBalanceClient API 和 RestTemplate 結合的方式來消費服務。

  1. 首先在引導類中添加 @EnableDiscoveryClient 注解Java微服務新生代之Nacos

  2. 再創建一個名為 RestConsumerConfiguration 的 Java 配置類,注入 RestTemplateJava微服務新生代之Nacos

  3. 創建一個名為 RestConsumerController 測試用的 Controller,提供一個請求方法 echo, 如下:Java微服務新生代之Nacos

  4. 啟動 rest-cosumer 工程后,就可以在 Nacos Server 控制臺的服務列表里看到多了一個名為 rest-consumer 的服務,并且直接在瀏覽器訪問 http://localhost:8082/echo,就會看到:

    Java微服務新生代之Nacos

使用上看是不是很簡單呢,其實和 Eureka 沒有太大差別,除了這種方式消費 Rest 服務外,Nacos 也支持 Feign 方式,我們來看下這又是如何使用的吧。

Feign 方式消費 Rest 服務

首先需要引入 Feign 客戶端依賴:

Java微服務新生代之Nacos

然后引導類添加注解 @EnableFeignClients 啟用 Feign 組件功能,編寫一個 EchoService 接口,用于調用遠程服務:

Java微服務新生代之Nacos

Get 請求方式的接口方法參數不能必須使用 @RequestParam 參數指定請求參數名稱,否則 Feign 都會通過 POST 方式調用,得到狀態碼 405 的錯誤。

注解 @FeignClient 指明了調用的服務提供方名稱,echo 方法通過 Spring MVC 提供的注解就可以跟服務提供者的 Rest 接口關聯,執行時就會調用對應請求方法。

最后我們只需要編寫一個注入 EchoService 控制器 RestConsumerFeignController 類,提供一個接口調用接口。

Java微服務新生代之Nacos

同樣啟動后,直接打開 http://localhost:8082/echo/hi,就會得到瀏覽器如下輸出:Java微服務新生代之Nacos

Dubbo 服務的注冊與發現

接下來,我們看下 Dubbo 怎么使用 Nacos 作為服務注冊中心,進行注冊與發現的,其實只要用過 ZooKeeper 方式的就會發現很簡單。

首先我們創建一個子工程 dubbo-serivce,POM 文件添加依賴如下:

Java微服務新生代之Nacos

  • 這里我們按照官方推薦使用 2.6.5 版本的 Dubbo 集成 Nacos。
  • dubbo-registry-nacos 是 Dubbo 使用 Nacos 作為注冊中心的關鍵依賴,當前版本為 0.0.1。

接著定義服務接口 DemoService

Java微服務新生代之Nacos

服務生產者

還是服務生產者先來,添加一個類 DemoServiceImpl 實現服務接口

Java微服務新生代之Nacos

然后以 XML 配置方式配置 Dubbo,只需要在 dubbo:registry元素上配置 Nacos 服務端地址即可。

Java微服務新生代之Nacos

最后用簡單類BasicProvidermain 方法直接啟動服務生產者,保持進程常駐。

Java微服務新生代之Nacos

正常啟動后我們直接在 Nacos 控制臺的服務列表里就可以,Dubbo 生產者服務已經成功注冊到 Nacos 上了,可以通過詳情看到服務的具體數據,比如服務端口,方法之類。

Java微服務新生代之Nacos

服務消費者

有了服務生產者,就來看下怎么去通過 Nacos 調用 Dubbo 服務。

首先,通過 XML 配置方式注入用 Dubbo 服務對象 DemoService, 在 dubbo:registry元素上配置 Nacos 服務端地址。

Java微服務新生代之Nacos

然后編寫簡單類 BasicConsumer ,在 main 方法中加載 Spring 容器,獲取 DemoService 對象,直接進行 RCP 調用。

Java微服務新生代之Nacos

運行之后,我們可以從 IDE 控制臺上看到不斷有日志輸出,說明了通過 Nacos 注冊中心的Dubbo 服務調用成功了。

Java微服務新生代之Nacos

結語

本文主要學習了解 Nacos,以及使用 Nacos 的服務注冊與發現功能,如何與 Rest 服務,Dubbo 服務進行集成使用,整體上簡單易用,有興趣的朋友也嘗試用下吧。后續我將繼續深入研究 Spring Cloud Alibaba 微服務生態的組件,歡迎感興趣的小伙伴可以關注我的微信公眾號,每周一更。

Java微服務新生代之Nacos

代碼示例

本文所涉及所有代碼片段均在下面倉庫中,歡迎感興趣的小伙伴參考學習:

nacos-actions:https://github.com/wrcj12138aaa/nacos-actions

環境支持:

  • JDK 8
  • Spring Boot 2.1.0
  • Maven 3.6.0

參考

  • 支持 Dubbo 生態發展,阿里巴巴啟動新的開源項目 Nacos:https://yq.aliyun.com/articles/604028
  • Nacos 官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html
  • Spring Cloud 服務發現新選擇 - Alibaba Nacos Discovery:https://www.bilibili.com/video/av32191103?from=search&seid=8421504995883713886
  • 集群部署說明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
  • NACOS #1189:https://github.com/alibaba/nacos/issues/1189
  • Spring Cloud 中如何使用 Feign 構造多參數的請求:https://www.jianshu.com/p/7ce46c0ebe9d
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤岗市| 高要市| 九寨沟县| 两当县| 湖州市| 镇江市| 巩义市| 南京市| 阜新市| 岳池县| 社旗县| 五原县| 彰化市| 揭东县| 林甸县| 定陶县| 南开区| 英德市| 堆龙德庆县| 泸溪县| 达孜县| 昆山市| 咸丰县| 汉中市| 塔城市| 阿拉善盟| 修武县| 金川县| 梁平县| 栾城县| 昌黎县| 兰州市| 永寿县| 洪雅县| 遂宁市| 钟山县| 黄山市| 河津市| 司法| 天全县| 龙岩市|