Java RPC 框架 Solon 1.3.9 发布,更便利的支持
Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,4000多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:RPC、REST API、MVC 等多种开发模式。
Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。
所谓更小:
内核0.1m,最小开发单位0.2m(相比Dubbo、Springboot项目包,小到可以乎略不计)
所谓更快:
本机helloworld测试,Qps可达12万之多。可参考:《helloworld_wrk_test》
所谓更自由:(代码操控自由)
// 除了注解模式之外,还可以按需手动 // //手动获取配置(Props 为 Properties 增强版) Props db = Solon.cfg().getProp("db"); //手动获取容器里的Bean UserService userService = Aop.get(UserService.class); //手动监听http post请求 Solon.global().post("/user/update", x-> userService.updateById(x.paramMap())); //手动添加个RPC服务 Solon.global().add("/rpc/", HelloService.class, true); //手动获取一个RPC服务消费端 HelloService helloService = Nami.builder().create(HelloService.class);
本次版本重大变更:
1、增加 solon.extend.sessionstate.jwt 组件,以使用session state 的方式,使用 jwt.token
此组件有两种应用场景:1)做管理后台的Session State,实现分布式Session的效果;2)做为接口的身份令牌
- 通过Cookie方式,做为管理后台的Session State;从而让方便管理后台集群部署(用 solon.extend.sessionstate.redis 也能干这事儿)
Set-Cookie: TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1NzEwNzAsImp0aSI6ImQ1Zjk5ZTk2MzA3NzRiNGZhNjRmNDJlMWIyNjQ0YjNkIiwiYmNmZG9ja19WYWxpZGF0aW9uX1N0cmluZyI6Ijl0MjIifQ._XY2p5IvItzL3xm3Iz6g2d1KpJG3y3cTn43uaM0dPS0;path=/;max-age=7200;domain=admin.demo.net;
- 通过Header方式,做为接口的身份令牌(通过配置,将jwt转到header上)
server.session: timeout: 7200 state.jwt: requestUseHeader: true responseUseHeader: true
使用demo
@Component(tag = "api") public class API_login_test extends ApiBase { @Logined @Mapping("login.test") public Result exec(Context ctx){ //获取会话状态(与常规session state一样操作) long user_id = ctx.session("user_id", 0); //设置会话状态 ctx.sessionSet("user_id", 100); return Result.succeed(); } }
TOKEN: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1NzEwNzAsImp0aSI6ImQ1Zjk5ZTk2MzA3NzRiNGZhNjRmNDJlMWIyNjQ0YjNkIiwiYmNmZG9ja19WYWxpZGF0aW9uX1N0cmluZyI6Ijl0MjIifQ._XY2p5IvItzL3xm3Iz6g2d1KpJG3y3cTn43uaM0dPS0;path=/;max-age=7200;domain=admin.demo.net;
2、增加便利的文件下载支持(是下载,不是上传)
@Controller public class Demo{ @Mapping("/file/down1") public void down1(Context ctx, String fileName){ File file = new File(fileName); //通过上下文接口,输出下载文件 ctx.outputAsFile(file); } @Mapping("/file/down2") public File down1(String fileName){ File file = new File(fileName); //通过MVC返回File,输出下载文件 return file; } }
3、增加 @Logined 登录验证注解
// // 如果未登录,则会提示出错(登录时,将用户id写入session state记录中) // @Controller public class Demo{ @Logined @Mapping("/file/api1") public Result api1(){ return Result.succeed(); } }
4、增加 solon.app.title 常态配置,便于管理后台的标题显示
//通过 Solon.cfg().appTitle() 接口获取
5、调整 Result 的默认成功码为200,默认失败码为400(借用http的状态码)
使用 Result 做为简单接口开发的统一格式输出,是非常友好的选择。类似:
@Controller public class Demo{ @Mapping("/file/api1") public Result api1(){ //直接返回成功结果:{cpde:200, description:"succeed"} return Result.succeed(); } @Mapping("/file/api2") public Result<UserModel> api2(){ UserModel user = DbUserApi.getUser(12); //返回成功结果:{cpde:200, description:"succeed", data:{user_id:1, name:"noear"}} return Result.succeed(user); } @Mapping("/file/api3") public Result api3(String mobile){ //返回错误结果:{cpde:4002001, description:"没有手机号"} return Result.failure(4002001, "没有手机号"); } }
如有需要,还可在启动时调整默认的成功与失败码
public class DemoApp{ public static void main(String[] args){ Solon.start(DemoApp.class, args, app->{ Result.SUCCEED_CODE = 1; Result.FAILURE_CODE = 0; }); } }
附:入门示例

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
现在最好玩的AI竟然来自一个家谱公司???
点击上方“视学算法”,选择加"星标"或“置顶” 重磅干货,第一时间送达 鱼羊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 哈利波特世界里,能让报纸上的照片动起来的魔法,现在麻瓜们已经掌握得越来越熟练了。 看,16岁的图灵正穿越时空朝你眨眼、微笑,神态十分自然。 原本在老照片中沉默的美人,当年眼波流转、巧笑倩兮的模样,也重新清晰呈现。 而这样的全家福,是否唤醒了一段有关过往的回忆? 这就是这个周末国外社交媒体上最火的AI应用,呈现在人们眼前的“魔法”。 连李开复本人都忍不住玩了一把…… 无需掌握什么技术,只要在MyHeritage这个网站上上传一张老照片,10-20秒之后,AI就会自动帮你赋予照片“生命”。 甚至是雕塑也一样OK: △图源:twitter@FlintDibble 如此自然的效果,让不少网友感叹:这非常哈利波特。 任何足够先进的技术都无法与魔法区分开来。 神奇的是,这是一个在线家谱网站… 所以,这个当红炸子鸡MyHeritage是什么来头,咋就突然掀起热潮了? 当你点进这个网站,你会发现它的本职其实是一个在线家谱平台…… 真的能帮你方便整理家谱的那一种……你...
- 下一篇
Jpom v2.4.9 已经发布,Java 项目在线管理
Jpom v2.4.9 已经发布,这是一个 Java 项目在线管理。 此版本更新内容包括: 2.4.9 - 3.0.0(beta) 新增功能 【Server】新增监控用户操作记录 【Agent】新增配置是否禁用根据jmx获取项目状态(默认启用) 项目文件管理支持在线修改文件(感谢@chenehc 贡献) 3.0.0bata版本的页面重构[采用vue项目编写](感谢@Hotstrip) 新增项目启动banner输出(感谢@Hotstrip) 解决BUG、优化功能 【Server】 优化判断构建命令中的删除命令关键词 【Server】 优化删除构建历史、构建代码(避免不能删除情况) 【Agent】 调整项目的jvm 和 args参数支持url编码。避免xss后冲突 优化获取项目当前运行路径问题 【Server】开始构建时输出代码目录 【Server】编辑构建类型为SVN没有分组bug(感谢@JAVA-落泪归枫) 更新文档Jpom 的JDK要为1.8.0_40+(感谢@tokune198_7 企鹅) 【Server】数据库初始化时间前置,打印成功日志,未初始化结束数据库相关操作都忽略 【Se...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2全家桶,快速入门学习开发网站教程
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音