日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Spring Cloud開發(fā)微服務(wù)應(yīng)用并部署至SAE

更新時(shí)間:

本文以包含服務(wù)提供者和服務(wù)消費(fèi)者的Spring Cloud應(yīng)用為例,讓您快速體驗(yàn)如何在本地開發(fā)、調(diào)試Spring Cloud應(yīng)用并部署到SAE,實(shí)現(xiàn)應(yīng)用的服務(wù)注冊(cè)與發(fā)現(xiàn),以及消費(fèi)者對(duì)提供者的調(diào)用。

背景信息

  • 如果您對(duì)Spring Cloud很陌生,僅了解Spring和Maven基礎(chǔ)知識(shí),那么閱讀本文后,您將掌握如何通過Spring Cloud Alibaba Nacos Discovery實(shí)現(xiàn)Spring Cloud應(yīng)用的服務(wù)注冊(cè)與發(fā)現(xiàn),以及實(shí)現(xiàn)消費(fèi)者對(duì)提供者的調(diào)用。

  • 如果您熟悉Spring Cloud中的Eureka、Consul和ZooKeeper等服務(wù)注冊(cè)組件,但未使用過Spring Cloud Alibaba的服務(wù)注冊(cè)組件Nacos Discovery,那么您僅需將服務(wù)注冊(cè)組件的服務(wù)依賴關(guān)系和服務(wù)配置替換成Spring Cloud Alibaba Nacos Discovery,無需修改任何代碼。

    Spring Cloud Alibaba Nacos Discovery同樣實(shí)現(xiàn)了Spring Cloud Registry的標(biāo)準(zhǔn)接口與規(guī)范,與您之前使用Spring Cloud接入服務(wù)注冊(cè)與發(fā)現(xiàn)的方式基本一致。

  • 如果您熟悉如何使用開源版本的Spring Cloud Alibaba Nacos Discovery實(shí)現(xiàn)Spring Cloud應(yīng)用的服務(wù)注冊(cè)與發(fā)現(xiàn),那么您可以將應(yīng)用直接部署到SAE,即可使用到SAE提供的商業(yè)版服務(wù)注冊(cè)與發(fā)現(xiàn)的能力。更多信息,請(qǐng)參見應(yīng)用托管概述

為什么使用SAE服務(wù)注冊(cè)中心

SAE服務(wù)注冊(cè)中心提供了開源Nacos Server的商用版本,使用開源版本Spring Cloud Alibaba Nacos Discovery開發(fā)的應(yīng)用可以直接使用SAE提供的商業(yè)版服務(wù)注冊(cè)中心。

SAE服務(wù)注冊(cè)中心與Nacos、Eureka和Consul相比,具有以下優(yōu)勢(shì):

  • 共享組件,節(jié)省了部署、運(yùn)維Nacos、Eureka或Consul的成本。

  • 在服務(wù)注冊(cè)和發(fā)現(xiàn)的調(diào)用中都進(jìn)行了鏈路加密,保護(hù)您的服務(wù),無需再擔(dān)心服務(wù)被未授權(quán)的應(yīng)用發(fā)現(xiàn)。

  • SAE服務(wù)注冊(cè)中心與SAE其他組件緊密結(jié)合,為您提供一整套的微服務(wù)解決方案,包括環(huán)境隔離、灰度發(fā)布等。

您在SAE部署應(yīng)用時(shí),SAE服務(wù)注冊(cè)中心以高優(yōu)先級(jí)自動(dòng)設(shè)置Nacos Server服務(wù)端地址和服務(wù)端口,以及命名空間、AccessKey、Context-path等信息,無需進(jìn)行任何額外的配置。

當(dāng)您的微服務(wù)應(yīng)用較多時(shí),注冊(cè)中心按推薦程度由高到低依次排序如下。

  • 商業(yè)版的服務(wù)注冊(cè)中心(MSE)

    bt_use_mse_nacos_in_service_registration_and_discovery

    搭建并部署商業(yè)版的服務(wù)注冊(cè)中心(使用MSE的Nacos作為服務(wù)注冊(cè)中心)的具體操作,請(qǐng)參見使用MSE的Nacos注冊(cè)中心

  • 自建服務(wù)注冊(cè)中心

    bt_use_user_created_nacos_in_service_registration_and_discovery

    搭建并部署自建Nacos注冊(cè)中心時(shí),您需要確認(rèn)以下內(nèi)容。

    • 確保SAE的網(wǎng)絡(luò)與自建Nacos的網(wǎng)絡(luò)互通。

    • 確保-D-XX參數(shù)未交替使用,以免命令失效。示例代碼如下:

      • 修改前:

        java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
      • 修改后:

        java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
    • 建議在部署應(yīng)用時(shí),使用鏡像或者JAR包方式,并配置啟動(dòng)參數(shù)-Dnacos.use.endpoint.parsing.rule=false-Dnacos.use.cloud.namespace.parsing=false

      重要

      啟動(dòng)參數(shù)需要放在-jar之前,否則可能會(huì)導(dǎo)致無法使用非SAE自帶的注冊(cè)中心。

      • 如果采用鏡像方式,請(qǐng)將-Dnacos.use.endpoint.parsing.rule=false-Dnacos.use.cloud.namespace.parsing=false配置在鏡像文件的程序啟動(dòng)命令中。Docker鏡像制作方法,請(qǐng)參見制作Java鏡像

        示例代碼如下:

        RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
      • 如果采用JAR包方式,請(qǐng)?jiān)诳刂婆_(tái)啟動(dòng)命令設(shè)置區(qū)域的options設(shè)置文本框輸入-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。圖示為Open JDK 8運(yùn)行環(huán)境下的Java應(yīng)用。具體操作,請(qǐng)參見設(shè)置啟動(dòng)命令sc_configure_a_startup_command_for_nacos

  • SAE內(nèi)置服務(wù)注冊(cè)中心

    sc_sae_service_registration_and_discovery

    SAE提供Java微服務(wù)自動(dòng)尋址的Nacos Server能力,您可以通過SAE服務(wù)注冊(cè)發(fā)現(xiàn)功能配置。具體操作,請(qǐng)參見使用SAE內(nèi)置Nacos

準(zhǔn)備工作

  • 下載Maven并設(shè)置環(huán)境變量。

  • 啟動(dòng)Nacos Server。

    1. 下載并解壓Nacos Server

    2. 進(jìn)入nacos/bin目錄,啟動(dòng)Nacos Server。

      • Linux、Unix、macOS系統(tǒng):執(zhí)行命令sudo sh startup.sh -m standalone

      • Windows系統(tǒng):執(zhí)行命令startup.cmd -m standalone

      說明

      standalone表示單機(jī)模式運(yùn)行,非集群模式。startup.cmd文件默認(rèn)以集群模式啟動(dòng),因此您在使用Windows系統(tǒng)時(shí),如果直接雙擊執(zhí)行startup.cmd文件會(huì)導(dǎo)致啟動(dòng)失敗,此時(shí)需要在startup.cmd文件內(nèi)設(shè)置MODE="standalone"。 更多信息,請(qǐng)參見Nacos快速開始

步驟一:創(chuàng)建服務(wù)提供者

在本地創(chuàng)建服務(wù)提供者應(yīng)用工程,添加依賴,開啟服務(wù)注冊(cè)與發(fā)現(xiàn)功能,并將注冊(cè)中心指定為Nacos Server。

  1. 創(chuàng)建命名為nacos-service-provider的Maven工程。

  2. pom.xml文件中添加依賴。

    具體示例,請(qǐng)參見nacos-service-provider。本文以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1為例,依賴如下:

    說明

    不支持Spring Boot 2.4及以上版本。支持Spring Cloud Alibaba2.2.6.RELEASE版本(1.4.2客戶端版本)。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</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>                  

    示例中使用的版本為Spring Cloud Greenwich,對(duì)應(yīng)Spring Cloud Alibaba版本為2.1.1.RELEASE。

    • 如果使用Spring Cloud Finchley版本,對(duì)應(yīng)Spring Cloud Alibaba版本為2.0.1.RELEASE。

    • 如果使用Spring Cloud Edgware版本,對(duì)應(yīng)Spring Cloud Alibaba版本為1.5.1.RELEASE。

      說明

      Spring Cloud Edgware版本的生命周期已結(jié)束,不推薦使用該版本開發(fā)應(yīng)用。

  3. src\main\java下創(chuàng)建Packagecom.aliware.edas

  4. 在Packagecom.aliware.edas中創(chuàng)建服務(wù)提供者的啟動(dòng)類ProviderApplication,并添加以下代碼。

    其中@EnableDiscoveryClient注解表明此應(yīng)用需開啟服務(wù)注冊(cè)與發(fā)現(xiàn)功能。

        package com.aliware.edas;
    
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
        @SpringBootApplication
        @EnableDiscoveryClient
        public class ProviderApplication {
    
            public static void main(String[] args) {
                SpringApplication.run(ProviderApplication.class, args);
            }
        }             
  5. 在Packagecom.aliware.edas中創(chuàng)建EchoController

    EchoController中,指定URL mapping為/echo/{string} ,指定HTTP方法為GET,從URL路徑中獲取方法參數(shù),并回顯收到的參數(shù)。

        package com.aliware.edas;
    
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }              
  6. src\main\resources路徑下創(chuàng)建文件application.properties,在application.properties中添加如下配置,指定Nacos Server的地址。

        spring.application.name=service-provider
        server.port=18081
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848               

    其中127.0.0.1為Nacos Server的地址。如果您的Nacos Server部署在另外一臺(tái)機(jī)器,則需要修改成對(duì)應(yīng)的IP地址。如果有其它需求,可以在application.properties文件中增加配置。更多信息,請(qǐng)參見配置項(xiàng)參考

  7. 驗(yàn)證結(jié)果。

    1. 執(zhí)行nacos-service-providerProviderApplicationmain函數(shù),啟動(dòng)應(yīng)用。

    2. 登錄本地啟動(dòng)的Nacos Server控制臺(tái)http://127.0.0.1:8848/nacos

      本地Nacos控制臺(tái)的默認(rèn)用戶名和密碼同為nacos

    3. 在左側(cè)導(dǎo)航欄,選擇服務(wù)管理 > 服務(wù)列表

      可以看到服務(wù)列表中已經(jīng)包含了service-provider,且在詳情中可以查詢?cè)摲?wù)的詳情。

步驟二:創(chuàng)建服務(wù)消費(fèi)者

本節(jié)除介紹服務(wù)注冊(cè)的功能,還將介紹Nacos服務(wù)與RestTemplate和FeignClient兩個(gè)客戶端如何配合使用。

  1. 創(chuàng)建命名為nacos-service-consumer的Maven工程。

  2. pom.xml中添加依賴。

    具體示例,請(qǐng)參見nacos-service-consumer

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</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>        
  3. src\main\java下創(chuàng)建Packagecom.aliware.edas

  4. 在Packagecom.aliware.edas中配置RestTemplate和FeignClient。

    1. 在Packagecom.aliware.edas中創(chuàng)建一個(gè)接口類EchoService,添加@FeignClient注解,并配置對(duì)應(yīng)的HTTP URL地址及HTTP方法。

      package com.aliware.edas;
      
      import org.springframework.cloud.openfeign.FeignClient;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      
      @FeignClient(name = "service-provider")
      public interface EchoService {
          @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
          String echo(@PathVariable("str") String str);
      }                   
    2. 在Packagecom.aliware.edas中創(chuàng)建啟動(dòng)類ConsumerApplication并添加相關(guān)配置。

      • 使用@EnableDiscoveryClient注解啟用服務(wù)注冊(cè)與發(fā)現(xiàn)。

      • 使用@EnableFeignClients注解激活FeignClient。

      • 添加@LoadBalanced注解將RestTemplate與服務(wù)發(fā)現(xiàn)集成。

      package com.aliware.edas;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.client.loadbalancer.LoadBalanced;
      import org.springframework.cloud.openfeign.EnableFeignClients;
      import org.springframework.context.annotation.Bean;
      import org.springframework.web.client.RestTemplate;
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @EnableFeignClients
      public class ConsumerApplication {
      
          @LoadBalanced
          @Bean
          public RestTemplate restTemplate() {
              return new RestTemplate();
          }
      
          public static void main(String[] args) {
              SpringApplication.run(ConsumerApplication.class, args);
          }
      }
  5. 在Packagecom.aliware.edas中創(chuàng)建類TestController以演示和驗(yàn)證服務(wù)發(fā)現(xiàn)功能。

        package com.aliware.edas;
    
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
        import org.springframework.web.client.RestTemplate;
    
        @RestController
        public class TestController {
    
            @Autowired
            private RestTemplate restTemplate;
            @Autowired
            private EchoService echoService;
    
            @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
            public String rest(@PathVariable String str) {
                return restTemplate.getForObject("http://service-provider/echo/" + str,
                        String.class);
            }
    
            @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
            public String feign(@PathVariable String str) {
                return echoService.echo(str);
            }
    
        }           
  6. src\main\resources路徑下創(chuàng)建文件application.properties,在application.properties中添加以下配置,指定Nacos Server的地址。

        spring.application.name=service-consumer
        server.port=18082
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    其中127.0.0.1為Nacos Server的地址。如果您的Nacos Server部署在另外一臺(tái)機(jī)器,則需要修改成對(duì)應(yīng)的IP地址。如果有其它需求,可以在application.properties文件中增加配置。更多信息,請(qǐng)參見配置項(xiàng)參考

  7. 驗(yàn)證結(jié)果。

    1. 執(zhí)行nacos-service-consumerConsumerApplicationmain函數(shù),啟動(dòng)應(yīng)用。

    2. 登錄本地啟動(dòng)的Nacos Server控制臺(tái)http://127.0.0.1:8848/nacos

      本地Nacos控制臺(tái)的默認(rèn)用戶名和密碼同為nacos

    3. 在左側(cè)導(dǎo)航欄,選擇服務(wù)管理 > 服務(wù)列表,可以看到服務(wù)列表中已經(jīng)包含了service-consumer,且在詳情中可以查詢?cè)摲?wù)的詳情。

步驟三:本地測(cè)試

在本地測(cè)試消費(fèi)者對(duì)提供者的服務(wù)調(diào)用結(jié)果。

  • Linux、Unix、macOS系統(tǒng):運(yùn)行以下命令。

    curl http://127.0.0.1:18082/echo-rest/rest-rest
    curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows系統(tǒng):在瀏覽器中輸入http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest

步驟四:將應(yīng)用部署到SAE

在本地完成應(yīng)用的開發(fā)和測(cè)試后,便可將應(yīng)用打包并部署到SAE。具體步驟,請(qǐng)參見創(chuàng)建應(yīng)用

重要
  • SAE不支持創(chuàng)建空應(yīng)用,因此第一次部署需在控制臺(tái)完成。

  • 如果使用JAR包部署,在應(yīng)用部署配置時(shí)選擇應(yīng)用運(yùn)行環(huán)境標(biāo)準(zhǔn)Java應(yīng)用運(yùn)行環(huán)境

  • 如果使用WAR包部署,在應(yīng)用部署配置時(shí)應(yīng)用運(yùn)行環(huán)境apache-tomcat-XXX

當(dāng)您將應(yīng)用部署到SAE時(shí),SAE服務(wù)注冊(cè)中心會(huì)以更高優(yōu)先級(jí)去設(shè)置Nacos Server服務(wù)端地址和服務(wù)端口,以及命名空間、AccessKey、Context-path信息。您無需進(jìn)行任何額外的配置,原有的配置內(nèi)容可以選擇保留或刪除。

步驟五:結(jié)果驗(yàn)證

  1. 為部署到SAE的應(yīng)用綁定SLB。具體步驟,請(qǐng)參見為應(yīng)用綁定CLB

  2. 在瀏覽器輸入配置好的公網(wǎng)訪問地址,并在應(yīng)用首頁發(fā)起調(diào)用請(qǐng)求。

  3. SAE控制臺(tái)查看服務(wù)調(diào)用數(shù)據(jù)。

    1. 登錄SAE控制臺(tái)

    2. 在左側(cè)導(dǎo)航欄,選擇應(yīng)用管理 > 應(yīng)用列表,在頂部菜單欄選擇地域,然后單擊具體應(yīng)用名稱。

    3. 在消費(fèi)者應(yīng)用基本信息頁面的左側(cè)導(dǎo)航欄,選擇應(yīng)用監(jiān)控 > 應(yīng)用總覽,查看服務(wù)調(diào)用數(shù)據(jù)總覽。

    如果能夠監(jiān)測(cè)到調(diào)用數(shù)據(jù),說明服務(wù)調(diào)用成功。

配置項(xiàng)參考

配置項(xiàng)

Key

默認(rèn)值

說明

服務(wù)端地址

spring.cloud.nacos.discovery.server-addr

Nacos Server啟動(dòng)監(jiān)聽的IP地址和端口。

服務(wù)名

spring.cloud.nacos.discovery.service

${spring.application.name}

當(dāng)前服務(wù)的名稱。

網(wǎng)卡名

spring.cloud.nacos.discovery.network-interface

當(dāng)未配置IP地址時(shí),注冊(cè)IP為此網(wǎng)卡所對(duì)應(yīng)的IP地址。如果網(wǎng)卡名也未配置,則默認(rèn)取第一塊網(wǎng)卡的地址。

注冊(cè)的IP地址

spring.cloud.nacos.discovery.ip

高優(yōu)先級(jí)。

注冊(cè)的端口

spring.cloud.nacos.discovery.port

-1

默認(rèn)情況下不用配置,系統(tǒng)會(huì)自動(dòng)探測(cè)。

命名空間

spring.cloud.nacos.discovery.namespace

不同環(huán)境的注冊(cè)邏輯隔離,例如開發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源(如配置、服務(wù))隔離等。

Metadata

spring.cloud.nacos.discovery.metadata

使用Map格式配置,您可以根據(jù)自己的需求自定義和服務(wù)相關(guān)的元數(shù)據(jù)信息。

集群

spring.cloud.nacos.discovery.cluster-name

DEFAULT

配置Nacos集群名稱。

接入點(diǎn)

spring.cloud.nacos.discovery.endpoint

地域的某個(gè)服務(wù)的入口域名。通過此域名可以動(dòng)態(tài)地獲取服務(wù)端地址,此配置在部署到SAE時(shí)無需填寫。

是否集成Ribbon

ribbon.nacos.enabled

true

如果沒有明確需求,不需要修改。

更多關(guān)于Spring Cloud Alibaba Nacos Discovery的信息,請(qǐng)參見開源版本的Nacos Discovery