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 开发预览的更多相关文章
- SpringBoot+FreeMarker开发word文档下载,预览
背景: 开发一个根据模版,自动填充用户数据并下载word文档的功能 使用freemarker进行定义模版,然后把数据进行填充. maven依赖: <parent> <groupId& ...
- 更强大的远程开发,Remote Tunnels 正式发布预览版!
Visual Studio Code 的核心是一个代码编辑器,它通过我们的远程开发经验与其他环境集成,变得更加强大和灵活: 你可能没有想到,但 VS Code 有一个内置的命令行界面(CLI),可以让 ...
- Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo
Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...
- 【小月博客】用HTML5的File API做上传图片预览功能
前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(P ...
- 关于H5里的API,上传图片预览功能
FileReader:读取本地图片文件并显示 写在开头 之前公司要求做一个H5页面,功能是照相和选择相册相片,并且能在屏幕上预览.然后我就傻里吧唧的各种找插件,因为有些插件不适配手机的型号,安卓机基本 ...
- 微信小程序开发正常,真机预览模式错误
原因是开发时设置了不检查域名是否合法,去后台设置上就可以了
- Revit二次开发之获得项目族预览图
using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.Attributes; using System.Wind ...
- C#开发微信门户及应用(30)--消息的群发处理和预览功能
在很多场合下,我们可能需要利用微信公众号的优势,定期给指定用户群发送一些推广消息或者新闻内容,以便给关注客户一种经常更新公众号内容的感觉,同时也方便我们经常和用户进行互动.微信公众号的高级群发接口就是 ...
- 3D Touch开发全面教程之Peek and Pop - 预览和弹出
## 3D Touch开发全面教程之Peek and Pop - 预览和弹出 --- ### 了解3D Touch 在iPhone 6s和iPhone 6s Plus中Apple引入了3D Touch ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_12-课程预览功能开发-需求分析
5 课程预览功能开发 5.1 需求分析 课程预览功能将使用cms系统提供的页面预览功能,业务流程如下: 1.用户进入课程管理页面,点击课程预览,请求到课程管理服务 2.课程管理服务远程调用cms添加页 ...
随机推荐
- mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...
- Failed to apply plugin [id com.android.application]
Failed to apply plugin [id com.android.application] 这种问题解决方法很简单,在BuildOutPut里面就能找到. 解决方法:在gradle.pro ...
- zk中控考勤机默认密码登陆
网络空间搜索: app="ZKTECO-考勤管理系统" 找到某一个考勤系统 进行弱口令登陆:admin/****** 成功! End!!!
- C语言博客作业07
1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪里 https://edu.cnblogs.com/cam ...
- 排查占用cpu最高线程
- C的基础常识
C是可移植性语言,因此可以在许多环境中使用,包括UNIX.Linux.MS-DOS.Windows和Macintosh OS. 使用C语言编写的内容的文本,称为源代码文件(source code fi ...
- 使用springboot+MybatisPlus+vue实现论文基础管理系统
页面效果如下 分析所需内容 数据库信息如下 t_paper t_comment 好了 数据库搞定 新建Springboot项目 选择Spring Initializr pom文件增加引入下面这三个依赖 ...
- 3、HTTP请求头与响应头
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- python2 selenium
参考blog: https://www.cnblogs.com/xiaozhiblog/p/5378723.html http://www.cnblogs.com/fnng/ 一.项目结构介绍 下面逐 ...
- ES2015常用知识点
ES2015(又称ES6)部分1 let/const以及块作用域:2 循环语句 const arr=[1,2,3]; for(const item of arr){ console.log(item) ...