文档

SOFARPC 客户端接入

更新时间:
一键部署

本文适用于订阅方使用 SOFARPC 作为客户端接入 API 网关。

前置条件

在进行本地订阅方应用开发、接入网关前,需要确保已经完成以下操作:

  • 已在 API 网关控制台创建了一个应用,参见 创建应用

  • 已将该应用的 APPID 提供给了 API 发布者,并获得了授权,参见 授权 API

  • 已获取了如下服务配置信息。具体获取方法,参见 获取服务端信息

    • 应用的访问密钥(Access Key/Secret Key)。

    • API 的域名地址(host)、接口名称(interface)、方法(method)等。

操作步骤

跟进 API 后端服务系统协议类型的不同,SOFARPC 订阅方接入步骤也有所不同。

SOFARPC/SOFAREST

在 API 的后端服务系统协议为 SOFARPC/SOFAREST 时,其网络拓扑如下图所示:

网络拓扑

API 服务示例

假设服务端发布了如下 SOFARPC 或 SOFAREST 服务,且已在 API 网关控制台上完成了相应 API 配置。

package com.alipay.gateway.serverdemo.service

publicinterfaceHelloService{
publicString sayHello();
}

API 调用示例

根据上述 API 服务示例,客户端可以使用标准的 SOFARPC reference 编码方式进行调用,只需添加几个特殊的网关参数即可。

  1. application-properties 文件中,添加以下配置:

    说明

    若以下配置已经存在,请确认配置无误。

    # 走网关寻址
    com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
    com.alipay.instanceid=000001
    com.antcloud.antvip.endpoint=acvip
  2. 引入服务端提供的 facade 包。

  3. 根据上文 前置条件 中获取的 API 服务端信息,修改 reference 方式,示例如下:

    说明

    如果 API 开启了密钥认证,您还需要在工程中配置相应的 Access Key 和 Secret Key,推荐使用启动参数和环境变量的形式。

    # 客户端请求的ak、sk,就是应用的密钥信息
    sub.app.access.key=<yourAccessKeyId>
    sub.app.secret.key=<yourAccessKeySecret>
    <sofa:reference jvm-first="false" id="helloService"
    interface="com.alipay.gateway.serverdemo.service.HelloService">
    <sofa:binding.bolt>
      //通过acvip获取网关rpc地址
    <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
      //也可以通过直连的方式填写网关地址test-url=网关的slbIp:12222
      <!--            <sofa:global-attrs connect.timeout="10000" test-url="127.0.0.1:12222" serialize-type="json"/>-->
    <sofa:parameter key="gateway.host" value="eq1ejclxfgde****.cloud.58dev.alipay.net"/>
    //开启数据加密后,在调用请阅的 API 时必须传入应用的 AK 和 SK 完成加签。
    <sofa:parameter key="gateway.ak" value="${sub.app.access.key}"/>
    <sofa:parameter key="gateway.sk" value="${sub.app.secret.key}"/>
    </sofa:binding.bolt>
    </sofa:reference>
  4. 调用 HelloService。

    publicclassClient{
    
    @Autowire
    privateHelloService helloService;
    
    // use helloService
    }

HTTP

在 API 的后端服务系统协议为 HTTP 时,其网络拓扑如下图所示:

HTTP

与 SOFARPC 和 SOFAREST 不同的是,一般 HTTP 服务的服务端不会提供 facade 包,但是使用 SOFARPC 调用需要一个 interface,所以客户端需要自行构造这个 interface。

API 服务示例

假设服务端是一个 SpringMVC 接口,如下所示:

package com.alipay.gateway.serverdemo.controller

// 服务端提供一个 /hello/world 服务

@RestController
@RequestMapping("/hello")
publicclassSpringController{

@RequestMapping("/world")
publicStringHello(){
return"world";
}
}

API 服务提供者在 API 网关控制台完成了相应的 API 配置,如下图所示。

1

API 调用示例

根据上述 API 服务示例,服务提供者要求客户端通过 com.alipay.gateway.client.service.xxxx.hello() 的方式来调用服务端提供的 HTTP 接口。

此时,客户端需要按照如下步骤进行编码配置:

  1. application-properties 文件中,添加以下配置:

    说明

    若以下配置已经存在,请确认配置无误。

    # 走网关寻址
    com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
    com.alipay.instanceid=000001
    com.antcloud.antvip.endpoint=acvip
  2. 构造 interface,示例如下:

    package com.alipay.gateway.client.service
    
    // client 使用 HelloSpringMVC.Hello 来访问服务端的  /hello/world 服务
    publicinterfaceHelloSpringMVC{
    String hello();
    }
  3. 根据上文 前置条件 中获取的 API 服务端信息,修改 reference 方式,示例如下:

    说明

    如果 API 开启了密钥认证,您还需要在工程中配置相应的 Access Key 和 Secret Key,推荐使用启动参数和环境变量的形式。

    # 客户端请求的ak、sk,就是应用的密钥信息
    gateway.accessKey=<yourAccessKeyId>
    gateway.secretKey=<yourAccessKeySecret>
    gateway.host=<yourHost>
    <sofa:reference jvm-first="false" id="helloSpringMVC"
    interface="com.alipay.gateway.client.service.HelloSpringMVC">
    <sofa:binding.bolt>
    <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
    
    @Value("${gateway.accessKey}")
    private String accessKey;
    
    @Value("${gateway.secretKey}")
    private String secretKey;
    
    @Value("${gateway.host}")
    private String host;
    </sofa:binding.bolt>
    </sofa:reference>
  4. 调用 HelloSpringMVC。

    publicclassClient{
    
    @Autowire
    privateHelloSpringMVC helloSpringMVC;
    
    // use helloSpringMVC
    }
  • 本页导读 (0)
文档反馈