Solon2 接口开发: 分布式 Api Gateway 开发预览
Posted 带刺的坐椅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solon2 接口开发: 分布式 Api Gateway 开发预览相关的知识,希望对你有一定的参考价值。
建议使用专业的分布式网关产品,比如:
- nginx
- apisix [推荐]
- k8s ingress controller
- 等...
对 Solon 来讲,只有 Gateway:它调用本地接口时,则为本地网关;调用远程接口时,则为分布式网关。
1、一个简单的分布式接口网关效果预览
基于上一节的 ApiGateway3x,微做调整:将注册的处理,由本地改为远程调用。主要原理演示:
- 拦截或过滤
- 路由
- 转发
@Mapping("/sev/**")
@Component
public class SevGateway extends ApiGatewayBase
@Override
protected void register()
filter(new BreakerFilter()); //融断
before(new StartHandler()); //开始计时
before(new ParamsParseHandler()); //参数解析
before(new ParamsSignCheckHandler(new Md5Encoder())); //参数签名较验
before(new ParamsRebuildHandler(new AesDecoder())); //参数重构
after(new OutputBuildHandler(new AesEncoder())); //输出构建
after(new OutputSignHandler(new Md5Encoder())); //输出签名
after(new OutputHandler()); //输出
after(new EndBeforeLogHandler()); //日志
after(new EndHandler("sev")); //结束计时
//添加一个处理类(带 @Mapping 的函数会注册进来)
add(Nav.class);
public static class Nav
//没有加印射值时,将做为默认处理 //当只有默认处理时,将接收所有请求
@Mapping
public Object def(Context ctx) throws Throwable
//检测请求,并尝试获取二级接口服务名
String sevName = ctx.pathMap("/sev/name/**").get("name");
if (sevName == null)
throw ApiCodes.CODE_4001011;
//转发请求(分布式的特点:转发到别处去)//使用服务名转发,即是用“负载均衡”了
String rstJson = HttpUtils.http(sevName, ctx.path()).data(ctx.paramMap()).post();
//返回 json //如有需求,也可先转换为对象
return rstJson; //return ONode.load(rstJson).toData();
以上是关于Solon2 接口开发: 分布式 Api Gateway 开发预览的主要内容,如果未能解决你的问题,请参考以下文章