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 开发预览的主要内容,如果未能解决你的问题,请参考以下文章

Leaf源码network,gate部分剖析

Leaf源码network,gate部分剖析

多个 Zuul Gate-gateway 以减少流量

温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式

curator

leaf源码分析----gate和network