SOFARPC 客户端接入
本文适用于订阅方使用 SOFARPC 作为客户端接入 API 网关。
前置条件
在进行本地订阅方应用开发、接入网关前,需要确保已经完成以下操作:
操作步骤
跟进 API 后端服务系统协议类型的不同,SOFARPC 订阅方接入步骤也有所不同。
API 后端服务协议为:SOFARPC/SOFAREST
API 后端服务协议为:HTTP
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 编码方式进行调用,只需添加几个特殊的网关参数即可。
在
application-properties
文件中,添加以下配置:说明若以下配置已经存在,请确认配置无误。
# 走网关寻址 com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
引入服务端提供的 facade 包。
根据上文 前置条件 中获取的 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>
调用 HelloService。
public class Client { @Autowire private HelloService helloService; // use helloService }
HTTP
在 API 的后端服务系统协议为 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 配置,如下图所示。
API 调用示例
根据上述 API 服务示例,服务提供者要求客户端通过 com.alipay.gateway.client.service.xxxx.hello()
的方式来调用服务端提供的 HTTP 接口。
此时,客户端需要按照如下步骤进行编码配置:
在
application-properties
文件中,添加以下配置:说明若以下配置已经存在,请确认配置无误。
# 走网关寻址 com.alipay.sofa.rpc.registries.gateway=gateway://${acvip}:80
构造 interface,示例如下:
package com.alipay.gateway.client.service // client 使用 HelloSpirngMVC.Hello 来访问服务端的 /hello/world 服务 public interface HelloSpirngMVC { String hello(); }
根据上文 前置条件 中获取的 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>
调用 HelloSpringMVC。
public class Client { @Autowire private HelloSpirngMVC helloSpirngMVC; // use helloSpirngMVC }