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;
});
}
}
附:入门示例
- 入门教程示例:https://gitee.com/noear/solon_demo
- RPC入门教程示例:https://gitee.com/noear/solon_rpc_demo
- 进阶教程示例:https://gitee.com/noear/solon_advance_demo
Java RPC 框架 Solon 1.3.9 发布,更便利的支持的更多相关文章
- Java RPC 框架 Solon 1.3.7 发布,增强Cloud接口能力范围
Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC. ...
- Spring Boot & Cloud 轻量替代框架 Solon 1.4.1 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)
gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控. ...
- 又一个小而美的Java Web框架: Solon!
Solon 是Java世界里一个新的极易上手的Web框架.参考过 Javalin . Spring 等很多现有框架的设计. 取名自海贼王里的角色,说是希能像他一样能打 小.真的是小.最小的运行单位只有 ...
- 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架
这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在 ...
- Springboot 轻量替代框架 Solon 1.3.10 发布
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...
- Spring Boot & Cloud 轻量替代框架 Solon 1.3.37 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.8 发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.12 发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
随机推荐
- Codeforces Round #657 (Div. 2) A. Acacius and String(字符串)
题目链接:https://codeforces.com/contest/1379/problem/A 题意 给出一个由 '?' 和小写字母组成的字符串,可以将 '?' 替换为小写字母,判断是否存在一种 ...
- 【noi 2.5_8465】马走日(dfs)
最基本的dfs.这代码理应超时的,我也不知为何AC了......打表我都放弃了,因为最大的数据真的要跑很久...... 1 #include<cstdio> 2 #include<c ...
- AtCoder Beginner Contest 184 E - Third Avenue (BFS)
题意:给你一张图,\(S\)表示起点,\(G\)表示终点,\(.\)表示可以走,#表示不能走,小写字母可以传送到任意一个相同的字母的位置,问从\(S\)走到\(G\)的最小步数. 题解:假如不考虑字母 ...
- 牛客编程巅峰赛S1第11场 - 黄金&钻石 A.牛牛的01游戏 (模拟栈)
题意:有一个\(01\)串,两个相邻的\(0\)可以变成一个\(1\),两个相邻的\(1\)可以直接消除,问操作后的字符串. 题解:数组模拟栈直接撸,上代码吧. 代码: class Solution ...
- 牛客编程巅峰赛S1第5场 - 青铜&白银 C.排队 (优先队列,归并排序)
题意:有\(m\)个窗口,\(n\)个人排队,每个人都有各自的办理时间,只有办理完成窗口才能空出来,后面的人开始办理,求有多少人比后面的人开始办理的早但完成的晚. 题解:我们可以用优先队列来模拟办理, ...
- div 水平居中 内容居左
<div style="margin:0 auto;width:500px;text-align:left"> </div> https://zhidao. ...
- 列表解析式 -- Python
列表解析的语法:[expr for iter_var in iterable], 它迭代iterable对象的所有条目.其中的expr应用于序列的每个成员,最后的结果值是该表达式产生的列表,迭代变量并 ...
- MySQL 主从复制(下)
延时复制 因为延时复制主从数据同一时间不一致, 所以延时从库一般只能做备份,不提供任何对外服务 配置延时复制(已经有主从) 1.停止主从 mysql> stop slave; Query OK, ...
- centos7+腾讯云服务器搭建wordpress
title: centos7+腾讯云服务器搭建wordpress date: 2020-03-04 categories: web tags: [wordpress] 分两部分:1.搭建LEMP环境 ...
- UTC 时间转换 All In One
UTC 时间转换 All In One http://www.timebie.com/cn/stduniversal.php UTC 时间 世界的每个地区都有自己的本地时间,在 Internet 及无 ...