Solon 是一个轻量的Java基础开发框架。强调,克制 + 简洁 + 开放的原则;力求,更小、更快、更自由的体验。支持:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多种开发模式。短小而精悍!
Solon Cloud 是一系列的接口标准和配置规范,算是 Solon 的分布式开发套件方案。
快速了解Solon的材料:《Solon 特性简集,相较于 Springboot 有什么区别?》
《Solon Cloud 分布式服务开发套件清单,感觉受与 Spring Cloud 的不同》
《Solon 的想法与架构笔记》
《Solon 生态插件清单》,目前已有100多个生态插件
《Solon 框架入门》
所谓更小:内核0.1m,最小的接口开发单位0.2m(相较于 Dubbo、Springboot 的依赖包,小到可以乎略不计)
所谓更快:本机http 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); //手动为容器添加组件 Aop.wrapAndPut(DemoService.class); 本次版本主要变化: 1、增加新的插件适配添加 opentracing-solon-plugin 插件。可快速对接所有支持 opentracing 的链路跟踪产品。下面以 Jaeger 对接为例:
@Configuration public class Config { @Bean public Tracer tracer() throws TTransportException { Reporter reporter = new RemoteReporter.Builder() .withSender(new UdpSender(AGENT_HOST, AGENT_PORT, 0)) .withFlushInterval(10) .build(); return new JaegerTracer.Builder(Solon.cfg().appName()) .withReporter(reporter) .withExpandExceptionLogs() .withSampler(new ConstSampler(true)).build(); } } 2、优化 Nami 内部结构(不影响外部调用)优化 Nami Filter;改为链式过滤;并添加 Invocation 做为配套
拆分 Nami.Builder 为独立的 NamiBuilder 类
取消 Decoder, Encoder, Channel 对 Filter 的继承;改为更明确的 pretreatment 预处理接口
移动 Result 到 nami 一级包目录
简化 Naimi 的附件模式。改由 NamiAttachment 直接操控
总体来说,是简化和增强了 Nami 的过滤及附件能力。例:
//过滤能力 @Component public class NamiFilterAdapter implements Filter { //这是Nami的过滤器接口 @Override public Result doFilter(Invocation inv) throws Throwable { inv.headers.put("token","1"); System.out.println("我给 Nami 加了个头信息!"); return inv.invoke(); } } //附件能力 @Controller public class Demo { @NamiClient HelloService helloService; @Mapping("http://www.likecs.com/") public void test() { //添加附件:token=aaa (最终会做为 header 传给 server) NamiAttachment.put("Token","5643c10c-87c3-4b7e-bd26-30cf2456aad8"); //helloService 的 remoting server ,需要有 token 认证 helloService.hello("noear"); } } 3、增强部分接口及相关配置能力增加 Solon Filter 序号位支持
增加 Solon Props::getByParse 接口,可应对组合配置需要。例:Hello ${user.name} 这样的配置需求
增加 CloudJobHandler 接口,让 Job Handler 更清晰些
增加 Solon Auth 新注解:@AuthIp, @AuthPath 支持
增加 CloudConfig 的注解内容,支持 ${xx}yyy 风格配置
增加 CloudEvent 的注解内容,支持 ${xx}yyy 风格配置
增加 CloudJob 的注解内容,支持 ${xx}yyy 风格配置
增加 CloudBreaker 的注解内容,支持 ${xx}yyy 风格配置
增加 @Component 单例组件通过 EventBus 扩展的机制
增加 env 启动参数切换配置文件;例:java -jar xxx.jar -env=test
标注 Utils::throwableWrap 函数为弃用,并调整内部异常包装处理
限制 DataThrowable 被最终渲染
取消 WarnThrowable
4、日志对接进一步增加Solon 的日志体系,除自有 slf4j 实现之后;还适配有 Logback 的添加器;现增加 Log4j 添加器的适配。
附:项目地址Gitee:https://gitee.com/noear/solon
Github:https://github.com/noear/solon
附:入门示例Solon 入门教程示例:https://gitee.com/noear/solon_demo
Solon Rpc 入门教程示例:https://gitee.com/noear/solon_rpc_demo
Solon Cloud 入门教程示例:https://gitee.com/noear/solon_cloud_demo
Solon 进阶教程示例:https://gitee.com/noear/solon_advance_demo