当前位置 博文首页 > 刘之西东:对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.

    刘之西东:对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.

    作者:刘之西东 时间:2021-06-08 18:28

    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("/")
        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
    bk
    下一篇:没有了