首页 > 其他分享 >Solon2 接口开发: 分布式 Api Gateway 开发预览

Solon2 接口开发: 分布式 Api Gateway 开发预览

时间:2023-03-22 12:14:51浏览次数:33  
标签:after ctx 接口 Api Solon2 new before 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();
        }
    }
}

标签:after,ctx,接口,Api,Solon2,new,before,Gateway,分布式
From: https://www.cnblogs.com/noear/p/17243246.html

相关文章

  • Solon2 接口开发: 了解 LoadBalance
    上一文的代码HttpUtils.http(sevName,ctx.path())(来自"solon.cloud.httputils"插件的工具类),内部是通过sevName获取对应服务负载均衡,并最终获取服务实例地址。内部接......
  • [FastAPI-04]查询参数-分页
    fromfastapiimportFastAPIBOOKS=[{"id":1,"title":"book1"},{"id":2,"title":"book2"},{"id":3,"title":"book3"},{"id":4,&qu......
  • jenkins学习笔记之十五:SonarSQube API使用
    本章主要通过SonarSQubeAPI在pipeline第一次执行时就指定自定义的质量配置和质量阈API 文档:http://192.168.1.134:9000/web_api一、编写sonarAPI(sonarapi.groovy)注......
  • 开源API网关APINTO:快速入门
    公司领导对选型APINTO网关比较满意,自然少不了体验一下。首先来体验一下API网关最基本的功能:转发请求。Apinto快速入门从Apinto官网扒了个配置流程图,Apinto网关控制台主......
  • 《渗透测试》JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目 Day14
       0、什么是JS渗透测试?在Javascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞JS开发的WEB应用和PHP,JAVA,NET等区别在于即没有源代码,也可以通过......
  • pushGateWay 遇到的一些问题
    遇到的两个问题1、发现通过pgw推送的metric在不继续推送监控数据时,prometheus仍然在更新数据2、通过pgw推送metric都被覆盖了 问题一的解决方式1)查看文档:https://pro......
  • django-rest-framework-从零开始-6-视图类GenericAPIView的使用
    django-rest-framework-从零开始-6-视图类GenericAPIView的使用1、前言之前提到过的基于APIView类的视图,需要重写["get","post","put","patch","delete","head","opti......
  • Apinto Dashboad V2.0 发布:可视化控制台让配置更轻松!
    大家好,Eolink旗下开源网关Apinto本次带来了ApintoDashboadV2.0的版本发布。Dashboad需要与Apinto主版本一起使用,目前Dashboad可兼容Apinto0.12.4以上版......
  • fastapi多线程非阻塞启动
    1问题描述我在run.py文件下的主函数如下所示:importuvicornfromfastapiimportFastAPIapp=FastAPI(title="chatglm",description="开源版的chatglm接......
  • 10 个顶级开源 API 网关和管理工具
    微服务和API(应用程序编程接口的缩写)在可持续的现代应用程序开发中几乎变得司空见惯。API驱动微服务(一种将应用程序构建为小型、独立且可管理的服务/片段的架构设计),它们定......