溫馨提示×

溫馨提示×

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

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

Spring?Cloud?Alibaba整合Nacos使用的方法是什么

發(fā)布時(shí)間:2023-03-13 10:41:53 來源:億速云 閱讀:78 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Spring Cloud Alibaba整合Nacos使用的方法是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    一、前言

    近些年,隨著微服務(wù)框架在越來越多的公司產(chǎn)品中實(shí)踐落地,以Spring Cloud Alibaba為導(dǎo)向的一站式微服務(wù)解決方案也成為微服務(wù)實(shí)踐和運(yùn)用的風(fēng)向標(biāo),Spring Cloud Alibaba提供了越來越完善的各類微服務(wù)治理組件,比如分布式服務(wù)配置與注冊中心nacos,服務(wù)限流、熔斷組件sentinel等。

    二、常用服務(wù)注冊中心介紹

    為什么需要注冊中心呢?簡單來說,隨著微服務(wù)的個(gè)數(shù)增多,規(guī)模增大,再向以往那樣,兩個(gè)微服務(wù)之間直接通過拼接完整的請(qǐng)求url調(diào)用的話,微服務(wù)的維護(hù)成本將是巨大的,也不便于后續(xù)微服務(wù)的API統(tǒng)一治理。

    事實(shí)上,微服務(wù)化的目的就是為了減少服務(wù)間的緊密耦合,同時(shí),一定程度上減少服務(wù)與服務(wù)之間調(diào)用時(shí)更多的信息暴露,更直接點(diǎn)來說,就是說服務(wù)與服務(wù)之間的調(diào)用應(yīng)該是去中心化的調(diào)用,而注冊中心的好處就是為了達(dá)到此目的,注冊中心提供了一種服務(wù)與服務(wù)之間互相發(fā)現(xiàn)的機(jī)制,通過注冊中心,微服務(wù)提供的各類服務(wù)資源可以被統(tǒng)一納管,進(jìn)行集中式管理,這就是注冊中心的好處。

    2.1 dubbo服務(wù)注冊示意圖

    下面是dubbo核心的經(jīng)典的服務(wù)注冊與調(diào)用示意圖,其服務(wù)治理的核心就是注冊中心:Registry的存在。

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    2.2 常用注冊中心對(duì)比

    下圖列舉了常用的幾種分布式配置中心各個(gè)功能的對(duì)比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具體可結(jié)合實(shí)際場景進(jìn)行選擇;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    從上面的表的數(shù)據(jù)對(duì)比來看,springcloud alibaba為了更好的治理和打造自身的微服務(wù)生態(tài)體系,最終選擇了自研的nacos,nacos即是分布式服務(wù)注冊中心,同時(shí)也可以作為分布式配置中心使用,而且基于界面可視化操作客戶端,提供了完善的治理方案。

    三、nacos介紹

    3.1  什么是nacos

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

    3.2 nacos 特點(diǎn)

    nacos的主要特點(diǎn)如下:

    • 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測;

    • 動(dòng)態(tài)配置服務(wù);

    • 動(dòng)態(tài) DNS 服務(wù);

    • 服務(wù)及其元數(shù)據(jù)管理;

    簡而言之

    nacos 用于管理所有微服務(wù)、解決微服務(wù)之間調(diào)用關(guān)系錯(cuò)綜復(fù)雜、難以維護(hù)的問題;

    3.3 nacos生態(tài)鏈地圖

    下圖詳細(xì)介紹了nacos的生態(tài),優(yōu)勢,業(yè)務(wù),架構(gòu)等多維度的全景圖,由此可見,作為springcloud-alibaba微服務(wù)生態(tài)體系下的一款組件,其位置是非常重要的。

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    四、nacos部署

    nacos在單機(jī)環(huán)境下安裝部署非常簡單,只需要下載好安裝包之后,執(zhí)行bin目錄下的啟動(dòng)腳本即可快速啟動(dòng)服務(wù),下面是完整的流程。

    4.1 下載安裝包

    也可以根據(jù)自身的需要選擇合適的版本下載使用。

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

     選擇完版本后,可以選擇linux或者windows環(huán)境的安裝包下載即可;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

     這里選擇了zip壓縮包

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    4.2 修改腳本啟動(dòng)模式

    nacos啟動(dòng)腳本里面提供了集群模式和單機(jī)模式啟動(dòng)兩種方式,由于本機(jī)搭建使用,選用單機(jī)模式即可,修改啟動(dòng)腳本中如下的關(guān)鍵參數(shù);

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    4.3  啟動(dòng)nacos 服務(wù)

    修改并保存腳本之后,雙擊啟動(dòng)服務(wù)

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    啟動(dòng)成功之后,按上圖中地址訪問nacos的客戶端控制臺(tái),默認(rèn)登錄用戶名和密碼:nacos/nacos

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

     登錄成功后,看到如下的控制臺(tái)界面;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    五、Spring Cloud Alibaba 整合Nacos

    在真正進(jìn)行代碼整合之前,一定要弄清springloud alibaba版本選擇的事情,很多同學(xué)在這里由于沒弄清springloud alibaba與springboot的版本依賴,兼容性導(dǎo)致在整合過程中遇到較多的問題;

    5.1  Spring Cloud Alibaba版本選型

    下面摘取git中關(guān)于各個(gè)版本選型的詳細(xì)對(duì)照,git地址:各版本依賴關(guān)系地址,最重要的就是springboot的版本與Spring Cloud Alibaba 版本的依賴關(guān)系;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    5.2  實(shí)驗(yàn)整合案例說明

    需求說明

    1、創(chuàng)建兩個(gè)微服務(wù),order(訂單)微服務(wù),和stock(庫存)微服務(wù);

    2、將兩個(gè)微服務(wù)注冊到nacos,通過nacos實(shí)現(xiàn)order服務(wù)對(duì)stock服務(wù)的調(diào)用;

    5.3  整合完整過程

    5.3.1 創(chuàng)建聚合工程,包括兩個(gè)子模塊

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    5.3.2 根pom引入如下依賴

    有更多需要管理的jar,統(tǒng)一在dependencyManagement中加入即可;

    <!-- 統(tǒng)一管理jar包版本 -->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <log4j.version>1.2.17</log4j.version>
        </properties>
     
        <dependencyManagement>
            <dependencies>
     
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.2.2.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
     
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.SR1</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
     
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.1.0.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
     
            </dependencies>
        </dependencyManagement>
     
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    5.3.3 子模塊導(dǎo)入如下依賴

    這里暫時(shí)只需要導(dǎo)入springboot-web以及nacos的客戶端即可;

    <dependencies>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     
            <!--nacos-config 配置中心-自帶動(dòng)態(tài)刷新-->
            <!--<dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>-->
     
            <!--nacos-discovery 注冊中心-服務(wù)發(fā)現(xiàn)與注冊-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
     
        </dependencies>
    5.3.4 工程配置文件

    stock模塊配置文件

    server:
      port: 8085
     
    spring:
      application:
        name: stock-service
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #服務(wù)注冊中心地址
          #config:
            #server-addr: localhost:8848 #配置中心地址

    order模塊配置文件

    server:
      port: 8083
     
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #服務(wù)注冊中心地址
          #config:
            #server-addr: localhost:8848 #配置中心地址
     
    service-url:
      nacos-user-service: http://stock-service
    5.3.5 stock模塊提供一個(gè)扣減庫存接口

    在stock模塊中添加一個(gè)扣減庫存的接口,給下單接口使用

    @RestController
    @RequestMapping("/stock")
    public class StockController {
     
        @GetMapping("/reduct")
        public String reduct(){
            System.out.println("扣減庫存");
            return "扣減庫存";
        }
     
    }
    5.3.6 order模塊提供一個(gè)下單接口
    @RestController
    @RequestMapping("/order")
    public class OrderController {
     
        @Autowired
        RestTemplate restTemplate;
     
        @Value("${service-url.nacos-user-service}")
        private String serverURL;
     
        //localhost:8083/order/add
        @GetMapping("/add")
        public String add(){
            System.out.println("下單成功");
            //String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class);
            String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class);
            System.out.println(forObject);
            return "add order :" + forObject;
        }
     
    }
    5.3.7 工程啟動(dòng)類

    兩個(gè)模塊的啟動(dòng)類上面都加上@EnableDiscoveryClient 注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderApp {
        public static void main(String[] args) {
            SpringApplication.run(OrderApp.class,args);
        }
     
    }
    5.3.8 order模塊添加配置類

    由于spring-cloud-starter-alibaba-nacos-discovery默認(rèn)集成的是Ribbon,我們知道Ribbon是基于客戶端的負(fù)載均衡實(shí)現(xiàn),所以這里的LoadBalancerClient的實(shí)現(xiàn)類是RibbonLoadBalancerClient,由Ribbon實(shí)現(xiàn)對(duì)RestTemplate的負(fù)載均衡,在當(dāng)前的兩個(gè)工程模塊中,order作為客戶端,所以需要在order模塊中添加一個(gè)RestTemplate的配置類,并使用LoadBalanced注解進(jìn)行修飾;

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

    5.4  模擬測試

    5.4.1 啟動(dòng)服務(wù)

    啟動(dòng)nacos,然后依次啟動(dòng)stock服務(wù),order服務(wù),在工程啟動(dòng)的時(shí)候,注意下面的關(guān)鍵信息,說明服務(wù)注冊到了nacos;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    啟動(dòng)完成之后,再次檢查nacos的服務(wù)列表,可以發(fā)現(xiàn)上面正是兩個(gè)工程的服務(wù)名;

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    5.4.2 接口模擬調(diào)用

    瀏覽器調(diào)用order模塊的下單接口:localhost:8083/order/add,看到如下效果,說明通過nacos實(shí)現(xiàn)對(duì)微服務(wù)的調(diào)用就成功了

    Spring?Cloud?Alibaba整合Nacos使用的方法是什么

    以上就是“Spring Cloud Alibaba整合Nacos使用的方法是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI