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

REST 服務快速入門

微服務(SOFAStack MicroService)主要是通過 SOFARPC 來實現服務的發布和引用,而 SOFARPC 支持 REST 協議。本文以微服務本地開發到云端發布的整體流程為框架,讓您了解如何在本地實現 SOFAREST 功能,以及如何將應用發布到云端,并在云端進行服務管控。本文主要講述 SOFAREST 的實現原理,示例工程也支持直連的方式,讓您在本地體驗 SOFAREST 的服務發布和服務引用。

本地工程開發

SOFAREST 工程開發流程圖

REST流程圖.png

SOFAREST 示例代碼演示視頻

準備工作

  • 搭建 SOFABoot 環境。具體操作,請參見 搭建環境

  • 通過以下任一方式生成 2 個 SOFABoot Web 工程,分別作為服務發布方和引用方。

    • 創建 2 個 SOFABoot Web 工程。具體操作,請參見 新建工程

    • 直接下載 示例工程。下載后,請參考 版本說明將工程根目錄下 pom.xml 文件中的版本號修改為最新版本號。

本地開發流程

  1. 引入依賴。

    按步驟創建的工程默認已經引入該依賴,請忽略此步驟;直接下載的示例工程需在 2 個本地 SOFABoot 工程 Web 模塊 pom.xml 中引入 SOFARPC 的 Maven 依賴。

    <dependency>
        <groupId>com.alipay.sofa</groupId>
        <artifactId>rpc-enterprise-sofa-boot-starter</artifactId>
    </dependency>
  2. 編寫業務邏輯。

    主要為服務發布和服務引用。本示例使用注解的方式配置 Bean,實現服務發布和引用。更多詳情,請參見 使用注解方式。其它配置方式,請參見 使用 XML 配置使用編程 API

    • 服務發布的業務邏輯

      • 設計服務接口類

        本示例類名稱為 SampleRestFacade.java,接口路徑為 com.alipay.samples.rpc.SampleRestFacade

        @Path("/sofarest")  //注意該注解的繼承性問題,實現類或方法中,該注解的缺失,可能會造成 SOFAREST 調用報 404 錯誤。
        @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
        @Produces(MediaType.APPLICATION_JSON +";charset=UTF-8")
        public interface SampleRestFacade{
            /**
            * http://localhost:8341/sofarest/hello
            */
            @GET
            @Path("/hello")
            public String hello();
        }
      • 編寫服務實現類

        本示例類名稱為 SampleRestFacadeImpl.java,接口實現路徑為 com.alipay.samples.rpc.impl.SampleRestFacadeImpl

        @Service
        @SofaService(interfaceType =SampleRestFacade.class,bindings =@SofaServiceBinding(bindingType ="rest"))
        public class SampleRestFacadeImpl implements SampleRestFacade{
              private int count =0;
        
              public SampleRestFacadeImpl(){
                  System.out.println("print start");
              }
        
             @Override
             public String hello(){
                  return "Hello SOFARest! times = "+ count++;
             }
        }   
    • 服務引用邏輯

      • 引用對象注入

        本示例采用 ReferenceHolder 類對引用對象進行統一管理,示例如下:

        @Component
        public class ReferenceHolder{
              @SofaReference(interfaceType =SampleRestFacade.class, binding =@SofaReferenceBinding(bindingType ="rest",directUrl ="127.0.0.1:8341"))
              private SampleRestFacade sampleRestFacade;
              public SampleRestFacade getSampleRestFacade(){
                  return sampleRestFacade;
              }
             public void setSampleRestFacade(SampleRestFacade sampleRestFacade){
                 this.sampleRestFacade = sampleRestFacade;
             }
        }
        說明

        bindingType 為 rest 協議,直連 URL 端口為 8341,即 directUrl="127.0.0.1:8341"

      • 引用對象

        為了方便直觀使用,本示例將引用服務邏輯放在了 myclient-app 工程 Web 模塊的 com.alipay.mytestsofa.SOFABootWebSpringApplication 中,示例如下:

        @SpringBootApplication
        public class SOFABootWebSpringApplication{
             private static final Logger logger =LoggerFactory.getLogger(SOFABootWebSpringApplication.class);
        
             public static void main(String[] args){
                   //*************** 注意 ******************//
                  //本地同時啟動 myserver-app 和 myclient-app 時,由于 tomcat 端口沖突問題,需要修改 myclient-app 的 端口號為 8084。
                  //將 myserver-app 和 myclient-app 發布到云上環境時,由于默認健康檢查端口是 8080,所以需要注釋掉該行代碼。
                 System.setProperty("server.port","8084");
                 //由于本地啟動沒有注冊中心,所以使用本地直連的方式訪問本地啟動的 myserver-app,發布到線上的時候需要注釋掉該行代碼。
                 System.setProperty("run.mode","TEST");
                 //********************************//
        
                 SpringApplication springApplication =newSpringApplication(SOFABootWebSpringApplication.class);
                 ApplicationContext applicationContext = springApplication.run(args);
        
                  if(logger.isInfoEnabled()){
                        printMsg("SofaRpc Application (myclient-app) started on 8084 port.");
                  }
        
                  ReferenceHolder referenceHolder = applicationContext.getBean(ReferenceHolder.class);
                  //調用 SOFAREST 服務。
                 final SampleRestFacade sampleRestFacade = referenceHolder.getSampleRestFacade();
        
                  new Thread(new Runnable(){
                     @Override
                     public void run(){
                          while(true){
                                  try{
                                           String response = sampleRestFacade.hello();
                                           printMsg("Response from myserver-app.rest: "+ response);
                                  }catch(Exception e){
                                         e.printStackTrace();
                                  }finally{
                                         try{
                                                 TimeUnit.SECONDS.sleep(3);
                                          }catch(InterruptedException e){
                                              //ignore
                                         }
                                    }
                              }
                         }
                  }).start();
              }
             private static void printMsg(String msg){
                  System.out.println(msg);
                   if(logger.isInfoEnabled()){
                         logger.info(msg);
                    }
             }
        }
  3. 配置包掃描。

    @SpringBootApplication(scanBasePackages ={"com.alipay.mytestsofa","com.alipay.samples.rpc"})
    public class SOFABootWebSpringApplication{
    ...
    }
  4. 配置本地運行的端口。

    1. myserver-app Web 模塊 application.properties 文件中配置 rpc.tr.port=12201

      rpc.tr.port 是 TR 端口號,默認為 12200;TR = TaobaoRemoting 是 RPC 使用的底層通信框架。云端發布時不需要該項配置。

    2. 運行 Web 子模塊中的 SOFABootWebSpringApplication

      運行后,框架會自動進行服務的發布。為了避免端口沖突,需要在該類中指定端口。

      重要

      myserver-app 發布至云上環境前,必須注釋掉代碼中對 8083 端口的配置。

    3. myclient-app Web 模塊 application.properties 文件中配置 rpc.tr.port=12202

      rpc.tr.port 是 TR 端口號,默認為 12200。云端發布時不需要該項配置。

  5. 配置 application.properties

    1. 登錄 SOFAStack 控制臺

    2. 在左側導航欄選擇 中間件 > 中間件總覽

      image

      從中獲取以下信息:

      • instanceld(實例標識):應用實例在工作空間中的唯一標識。

        application.properties 中對應的 key 為 com.alipay.instanceid

      • AntVIP endpoint:區域的唯一標識,每個區域一個地址。應用通過 AntVIP 尋找所在區域環境的地址。不同環境的 AntVIP 地址值如下:

        • 杭州金區:cn-hangzhou-fin-middleware-acvip-prod.cloud.alipaycs.net

        • 上海非金:cn-shanghai-middleware-acvip-prod.cloud.alipaycs.net

        • 上海金區:cn-shanghai-fin-sofastack-middleware-acvip-prod.cloud.alipaycs.net

        • 杭州非金:cn-hangzhou-middleware-acvip-prod.cloud.alipaycs.net

        application.properties中對應的 key 為 com.antcloud.antvip.endpoint

      • Access Key ID:用于標識用戶。單擊 獲取 AK 可前往 RAM 控制臺獲取。具體操作,請參見 創建AccessKey

        application.properties 中對應的 key 為 com.antcloud.mw.access

      • Access Key Secret:用于驗證用戶。單擊 獲取 SK 可前往 RAM 控制臺獲取。具體操作,請參見 創建AccessKey

        application.properties 中對應的 key 為 com.antcloud.mw.secret

    3. 配置運行模式和運行環境,示例如下:

      run.mode=NORMAL
      com.alipay.env=shared
    4. 將上述步驟獲取的參數配置在 application.properties 文件中。

    說明

    更多信息,請參見 引入 SOFA 中間件

示例工程

下文以示例工程為例,對 SOFARPC 的實現原理進行說明。

示例概述

通過 IDEA 或 Eclipse 分別打開 rpc-demo 中的 myserver-appmyclient-app 工程。

示例工程關鍵信息

  • groupId: 工程組織的唯一標識,示例工程為 com.alipay.mytestsofa

  • artifactId:工程的構件標識符,示例工程為 myserver-appmyclient-app

  • version:版本號,默認為 1.0-SNAPSHOT

  • package:應用包名,默認等同于 groupId,工程示例為 com.alipay.mytestsofa

示例工程 Bean 配置

Bean 的配置分為服務發布和服務引用 2 個類型:

  • 服務發布的示例

    @SofaService(interfaceType =SampleRestFacade.class,bindings =@SofaServiceBinding(bindingType ="rest"))
  • 服務引用的示例

    @SofaReference(interfaceType =SampleRestFacade.class, binding =@SofaReferenceBinding(bindingType ="rest",directUrl ="127.0.0.1:8341"))
    private SampleRestFacade sampleRestFacade;
    說明

    示例中,為了便于對所有待引用實例進行統一管理,創建了 ReferenceHolder 類,進行引用管理。

示例工程的 REST 實現

SOFAREST 的實現基于 SOFARPC,SOFARPC 的實現原理說明如下:

  • 在 2 個工程的 endpoint 模塊中相同位置,提供相同的服務接口和實現,并通過注解發現服務。2 個工程通過相同接口實現關聯。一個客戶端,一個服務端,如果是本地工程,在引用時,通過配置 directUrl,以直連方式發現服務;如果是服務器上部署測試,則通過 DSR(Direct Server Return) 底座發現服務。

  • 啟動 myserver-app Web 模塊的 SOFABootWebSpringApplication 可發布服務。

  • 啟動 myclient-app Web 模塊的 SOFABootWebSpringApplication 可引用服務。

示例工程服務驗證

  1. 啟動 myserver-app Web 模塊的 SOFABootWebSpringApplication 發布服務。

  2. 啟動 myclient-app Web 模塊的 SOFABootWebSpringApplication 引用服務。

    引用成功后,myclient-app 控制臺將輸出:

    Response from myserver-app.rest:HelloSOFARest! times = xx

    本地瀏覽器訪問 http://localhost:8341/sofarest/hello,將輸出訪問 URL 鏈接那一刻,客戶端的調用次數。

    HelloSOFARest! times = xx

云端發布后,可以在客戶端命令行中輸入 curl http://{服務器 IP 地址}:8341/sofarest/hello 命令進行驗證。

您也可以通過日志來查看服務引用結果:默認在 /logs/myclient-app/common-default.log 中查看服務引用結果。您可以在 Web 子模塊路徑 src/main/resources/config/application.properties 中修改日志路徑。

應用打包和云端發布

  1. 打包本地應用。

    操作步驟,請參見 本地運行

  2. 發布應用。

    • 應用整體發布流程,請參見 技術棧使用指南

    • 應用的詳細發布步驟,建議根據發布方式,參考下述文檔:

服務管控

服務管控 頁面查詢并管控發布的 RPC 服務。更多詳情,請參見 查看服務服務查詢