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

實現服務注冊與發現

EDAS提供Nacos的商用版本注冊中心,使用Nacos作為注冊中心開發的應用無需修改任何代碼,部署到EDAS后,即可使用EDAS提供的共享注冊中心。本文介紹如何在本地基于Nacos開發一對Spring Cloud微服務示例應用(包含一個服務提供者Provider和一個服務消費者Consumer)。

如何選擇注冊中心

微服務應用通過注冊中心實現服務注冊與發現。在開發應用時,可以根據實際需求,參考下圖選擇注冊中心。

注冊中心選型

您可以使用本文介紹的Nacos作為注冊中心實現應用的服務注冊與發現,也可以使用自建或MSE托管的Eureka、ZooKeeper和Consul等其它類型的注冊中心。無論使用哪種類型的注冊中心,在將應用部署到EDAS之后,都可以使用EDAS提供的應用托管、微服務治理及云原生PaaS平臺能力。

您可以按照本文的內容實現應用的服務注冊與發現,也可以直接下載應用Demo:service-providerservice-consumer。

準備工作

  • 已下載Maven并設置環境變量。

  • 已下載最新版本的Nacos Server。

  • 已按以下步驟啟動Nacos Server。

    1. 解壓下載的Nacos Server壓縮包。

    2. 進入nacos/bin目錄,啟動Nacos Server。

      • Linux/Unix/Mac系統:執行命令sudo sh startup.sh -m standalone。

      • Windows系統:雙擊執行startup.cmd文件。

    3. 可選:

      在本地開發應用時,可以使用Alibaba Cloud Toolkit插件實現本地應用和部署在EDAS中的應用的相互調用,即端云互聯,而無需搭建VPN,幫助您提升開發效率。更多信息,請參見端云互聯簡介

操作步驟

步驟一:創建服務提供者

在本地創建服務提供者應用工程,添加依賴,開啟服務注冊與發現功能,并將注冊中心指定為Nacos Server。

  1. 創建名為nacos-service-provider的Maven工程。

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

    以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1為例,依賴如下。

    展開查看代碼

    <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.1.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,對應Spring Cloud Alibaba版本為2.1.1.RELEASE。

    • 如果使用Spring Cloud Finchley版本,對應Spring Cloud Alibaba版本為2.0.1.RELEASE。

    • 如果使用Spring Cloud Edgware版本,對應Spring Cloud Alibaba版本為1.5.1.RELEASE。Spring Cloud Edgware版本的生命周期已結束,不推薦使用該版本開發應用。

  3. src\main\java下創建Packagecom.aliware.edas

  4. 在Packagecom.aliware.edas中創建服務提供者的啟動類ProviderApplication,并添加以下代碼。

        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);
            }
        }  

    @EnableDiscoveryClient:表明該應用需開啟服務注冊與發現功能。

  5. 在Packagecom.aliware.edas中創建EchoController。

        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;
            }
        }              

    EchoController中,指定URL Mapping為/echo/{string} ,指定HTTP方法為GET,從URL路徑中獲取方法參數,并返回收到的參數。

  6. src\main\resources路徑下創建文件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部署在另外一臺機器,需修改為對應的IP地址。您可在application.properties文件中增加其它配置以滿足更多需求。更多信息,請參見配置項參考。

  7. 驗證服務提供者service-provider是否創建成功。

    1. 執行nacos-service-providerProviderApplicationmain函數,啟動應用。

    2. 登錄本地啟動的Nacos Server控制臺http://127.0.0.1:8848/nacos。

      本地Nacos控制臺的默認用戶名和密碼同為nacos。

    3. 在左側導航欄,選擇服務管理 > 服務列表

      可以看到服務列表中已經包含service-provider,單擊詳情,查詢該服務的詳情。

步驟二:創建服務消費者

本節介紹服務注冊的功能,以及如何配合使用Nacos服務與RestTemplate和FeignClient兩個客戶端。

  1. 創建名為nacos-service-consumer的Maven工程。

  2. pom.xml中添加依賴。

    展開查看代碼

    <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.1.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下創建Packagecom.aliware.edas

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

    1. 在Packagecom.aliware.edas中創建接口類EchoService,添加@FeignClient注解,并配置對應的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中創建啟動類ConsumerApplication并添加相關配置。

      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);
          }
      }
      • @EnableDiscoveryClient:啟用服務注冊與發現。

      • @EnableFeignClients:激活FeignClient。

      • @LoadBalanced:集成RestTemplate與服務發現。

  5. 在Packagecom.aliware.edas中創建類TestController以演示和驗證服務發現功能。

        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路徑下創建文件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部署在另外一臺機器,需修改為對應的IP地址。您可在application.properties文件中增加其它配置以滿足更多需求。更多信息,請參見配置項參考。

  7. 驗證結果。

    1. 執行nacos-service-consumerConsumerApplicationmain函數,啟動應用。

    2. 登錄本地啟動的Nacos Server控制臺http://127.0.0.1:8848/nacos。

      本地Nacos控制臺的默認用戶名和密碼同為nacos。

    3. 在左側導航欄,選擇服務管理 > 服務列表,可以看到服務列表中已經包含service-consumer,單擊詳情,查詢該服務的詳情。

步驟三:本地測試

在本地測試消費者對提供者的服務調用結果。

  • Linux/Unix/Mac系統:運行以下命令。

    curl http://127.0.0.1:18082/echo-rest/rest-rest
    curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows系統:在瀏覽器中輸入http://127.0.0.1:18082/echo-rest/rest-rest和http://127.0.0.1:18082/echo-feign/feign-rest。

后續步驟

應用開發完成后,即可部署到EDAS。具體操作,請參見應用創建和部署概述(ECS)創建和部署應用概述(K8s)。

配置項說明

配置項

Key

默認值

說明

服務端地址

spring.cloud.nacos.discovery.server-addr

Nacos Server啟動監聽的IP地址和端口。

服務名

spring.cloud.nacos.discovery.service

${spring.application.name}

當前服務的名稱。

網卡名

spring.cloud.nacos.discovery.network-interface

當IP未配置時,注冊的IP為此網卡所對應的IP地址。如果網卡名也未配置,默認取第一塊網卡的地址。

注冊的IP地址

spring.cloud.nacos.discovery.ip

注冊到注冊中心的IP地址。優先級最高。

注冊的端口

spring.cloud.nacos.discovery.port

-1

默認情況下無需配置,系統會自動探測。設置為-1表示不限端口。

命名空間

spring.cloud.nacos.discovery.namespace

常用于隔離不同環境的資源,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。

Metadata

spring.cloud.nacos.discovery.metadata

使用Map格式配置,您可以根據自己的需求自定義一些和服務相關的元數據信息。

集群

spring.cloud.nacos.discovery.cluster-name

DEFAULT

Nacos集群的名稱。

接入點

spring.cloud.nacos.discovery.endpoint

地域的某個服務的入口域名。通過該域名可以動態地獲取服務端地址,該配置在部署到EDAS時無需填寫。

是否集成Ribbon

ribbon.nacos.enabled

true

是否啟用Ribbon負載均衡。Ribbon是客戶端負載均衡器,通過負載均衡策略選擇其中一個實例處理請求。如果沒有明確需求,無需修改。

關于更多Spring Cloud Alibaba Nacos Discovery的信息,請參見開源版本的Nacos Discovery