「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。
日常业务开发过程中,常常有对接第三方接口,此时会用到网关。所谓网关又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。
网关的实现是通过指定接口发出请求,再进入指定接口接收请求,随后将请求转发为实际请求服务器的接口上。
通过网关请求的接口往往也要加密,要加密钥一起请求。
网关存在的原因:
解决微服务技术架构下,请求管理功能
解决微服务技术架构下,多客户端的适配,采用单一入口,完成协议适配
网关的基本实现如下:
/**
* 网关约定出入参都要加密加签,因此参数格式可以使用到的是json串
*/
public Response execute(String url, String jsonStr) {
Response resp = null;
String Path = getPath(url);
String requestId = UUID.randomUUID().toString();
try {
log.info("reqId: {}, requestCode: {}, params: {}", requestId, Path, json);
GateTestClient client = new GateTestClient(appId, appKey, url, testKey, publicKey);
HTestRequest request = new HTestRequest(Path, json);
request.setRequestId(requestId);
client.setRequestEncrypt(rtest);
client.setResponseSign(SignTest);
client.setConnectTimeout(10000);
resp = client.do(request);
log.info("gateway response, reqId: {}, requestCode: {}, result: {}", requestId, Path, JSON.toJSONString(resp));
} catch (Exception e) {
log.error(" reqId: {}, requestCode: {}, errMsg: {}", requestId, rawPath, e.getMessage(), e);
alarm(e.getMessage());
}
return resp;
}
设计网关的时候最好是每个环境都有一个路由,分别是开发环境、测试环境、预发环境、线上环境,均有对应的路由,然后在每个环境联调的时候就可以开启路由,保证配置的路由正确,这个可以通过分发机制去实现。
如何将实现层的接口放入到网关中,请看下面的代码实例。