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 }