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

public interface HelloService {
    public String sayHello();
}

API 调用示例

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

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

    说明

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

    # 走网关寻址
    com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
  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>
        <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
        <sofa:parameter key="gateway.host" value="eq1ejclxfgde****.cloud.58dev.alipay.net"/>
        <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。

    public class Client {
    
    	@Autowire
        private HelloService 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")
public class SpringController {
    
    @RequestMapping("/world")
    public String Hello() {
    	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
  2. 构造 interface,示例如下:

    package com.alipay.gateway.client.service
    
    // client 使用 HelloSpirngMVC.Hello 来访问服务端的  /hello/world 服务
    public interface HelloSpirngMVC {
        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="helloSpirngMVC"
                    interface="com.alipay.gateway.client.service.HelloSpirngMVC">
      <sofa:binding.bolt>
        <sofa:global-attrs connect.timeout="10000" registry="gateway"/>
        <sofa:parameter key="gateway.host" value="eq1ejclxfgde****.cloud.58dev.alipay.net"/>
        <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. 调用 HelloSpringMVC。

    public class Client {
    
    	@Autowire
        private HelloSpirngMVC helloSpirngMVC;
        
        // use helloSpirngMVC
    }