Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,4000多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:RPC、REST API、MVC 等多种开发模式。

Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。

项目地址:

https://gitee.com/noear/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;
});
}
}

附:入门示例

Java RPC 框架 Solon 1.3.9 发布,更便利的支持的更多相关文章

  1. Java RPC 框架 Solon 1.3.7 发布,增强Cloud接口能力范围

    Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC. ...

  2. Spring Boot & Cloud 轻量替代框架 Solon 1.4.1 发布

    Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...

  3. Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)

    gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控. ...

  4. 又一个小而美的Java Web框架: Solon!

    Solon 是Java世界里一个新的极易上手的Web框架.参考过 Javalin . Spring 等很多现有框架的设计. 取名自海贼王里的角色,说是希能像他一样能打 小.真的是小.最小的运行单位只有 ...

  5. 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架

    这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在 ...

  6. Springboot 轻量替代框架 Solon 1.3.10 发布

    Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...

  7. Spring Boot & Cloud 轻量替代框架 Solon 1.3.37 发布

    Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...

  8. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.8 发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  9. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.12 发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

随机推荐

  1. 【noi 2.5_1789】算24(dfs)

    最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教.正解很机智--直接随意将几个数"捆绑"在一起,值存在其中一个数上,其他数标记不可再选,直 ...

  2. Codeforces Round #648 (Div. 2) F. Swaps Again

    题目链接:F.Swaps Again 题意: 有两个长度为n的数组a和数组b,可以选择k(1<=k<=n/2)交换某一个数组的前缀k和后缀k,可以交换任意次数,看最后是否能使两个数组相等 ...

  3. echart关系图平分节点删除时自动平衡问题

    项目场景: 项目场景:Echarts关系图中(不是力图)一个节点x,y是固定的,为了同一列能居中显示,规定:当前列有奇数个元素新节点往下放,有偶数个节点时新节点往上放. 问题描述: 删除中间节点会有空 ...

  4. 【非原创】sg函数模板

    学习博客:戳这里 解题模型: 1.把原游戏分解成多个独立的子游戏,则原游戏的SG函数值是它的所有子游戏的SG函数值的异或.        即sg(G)=sg(G1)^sg(G2)^...^sg(Gn) ...

  5. 操作系统:Linux进程与线程

    这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...

  6. Leetcode(145)-二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 思路:一开始编写二叉树后序遍历的程序,感觉定级为困难有点欠妥,确实,如果用 ...

  7. mysql 查询,天,周,月等写法

    1.查询当天的数据 select * from 表名 where TO_DAYS(时间字段)=TO_DAYS(NOW()); 2.查询当周的数据 select * from 表名 where YEAR ...

  8. 80行Python代码搞定全国区划代码

    微信搜索:码农StayUp 主页地址:https://gozhuyinglong.github.io 源码分享:https://github.com/gozhuyinglong/blog-demos ...

  9. CSS3 优先级

    CSS3   优先级  https://developer.mozilla.org/zh-CN/docs/Web/CSS/Specificity 优先级 在本文章中 概念 优先级是如何计算的? 选择器 ...

  10. taro list render bug

    taro list render bug 列表渲染 https://taro-docs.jd.com/taro/docs/list.html not support jsx map 垃圾微信 cons ...