zoukankan      html  css  js  c++  java
  • Spring Boot 轻量替代框架 Solon 1.3.20 发布

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

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

    替代?那有什么异同之处?

    《Solon 特性简集,相较于 Springboot 有什么区别?》

    《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);
    

    本次版本主要变化:

    1、Solon Cloud 增加分布式文件服务定义: CloudFileService

    public interface CloudFileService {
        InputStream getStream(String bucket, String key) throws CloudFileException;
        Result putStream(String bucket, String key, InputStream stream, String streamMime) throws CloudFileException;
        
        InputStream getText(String bucket, String key) throws CloudFileException;
        Result putText(String bucket, String key, String text) throws CloudFileException;
        ...
    }
    

    2、Solon Cloud 增加适配组件:aliyun-oss-solon-plugin、aws-s3-solon-plugin(适配 CloudFileService)

    以 aliyun-oss-solon-plugin 使用为例:

    • 配置:
    solon.cloud.aliyun.oss:  # 亚马逊则为:solon.cloud.aws.s3
      file:
        bucket: aaa
        endpoint: bbb.xxx.xxx
        accessKey: ccc
        secretKey: ddd
        
    #可以通过配置服务动态加载,以灵活切换不同的配置    
    #solon.cloud.water:
    #  server: water
    #  config:
    #    load: xxx_hdfs_cfg
    
    • 代码:
    public class DemoService {
        public void test() {
            String key = "test/" + Utils.guid();
            String val = "Hello world!";
            
            //写入数据
            Result result = CloudClient.file().putText(key, val);
            System.out.println(ONode.stringify(result));
            assert result.getCode() == Result.SUCCEED_CODE;
    
            //读取数据
            String tmp = CloudClient.file().getText(key);
            assert val.equals(tmp);
        }
    }    
    

    3、Solon Cloud 增加适配组件:mqtt-solon-plugin(适配 CloudEventService)

    配置示例:

    solon.app:
      group: demo
      name: consumer
      
    solon.cloud.mqtt:
      server: "tcp://localhost:41883"   #mqtt服务地址
    

    代码示例:

    @Controller
    public class TestController {
        @Mapping("/test")
        public Object test(String msg) {
            if(Utils.isEmpty(msg)){
                msg = "demo2";
            }
    
            Event event = new Event("hello.demo", msg).qos(1).retained(true);
            return CloudClient.event().publish(event);
        }
    }
    

    4、增加应用启动事件:AppInitEndEvent

    Solon 启动处理顺序:

    • 1.实例化 Solon.global() 并加载配置
    • 2.加载扩展文件夹
    • 3.扫描插件并排序
    • 4.运行 initialize 函数
    • 5.推送 AppInitEndEvent 事件(新增)
    • 6.运行插件
    • 7.推送 PluginLoadEndEvent 事件
    • 8.导入java bean(@Import)
    • 9.扫描并加载java bean
    • a.推送 BeanLoadEndEvent 事件
    • b.加载渲染印映关系
    • c.执行bean加完成事件
    • d.推送 AppLoadEndEvent 事件
    • e.结束
    //订阅示例(通过Solon事件总线提前订阅)
    EventBus.subscribe(AppInitEndEvent.class, event->{
        System.out.println("app init end...");
    });
    
    Solon.start(App.class, args);
    
    • 此例代码摘自组件 solon.extend.staticfiles :
    //切换处理(让静态文件优先)
    HandlerPipeline pipeline = new HandlerPipeline();
    pipeline.next(new StaticResourceHandler()).next(app.handlerGet());
    
    app.handlerSet(pipeline);
    
    • 此例代码摘自组件 srww.base
    SolonServletFilter.onFilterEnd = new HandlerPipeline().next(new BaseLogHandler()).next(new BaseEndHandler());
    

    附:入门示例

  • 相关阅读:
    xshell中的nohup与&的含义
    eclipse启动服务报错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    关于MyEclipse启动报错:Error starting static Resources;下面伴随Failed to start component [StandardServer[8005]]; A child container failed during start.的错误提示解决办法.
    组件/服务之间的通信-事件广播和订阅可以有效减少全局变量
    #css3# 可以多背景图设置
    #RXJS# 基础
    #TS# get/set
    #css3# : vs ::
    #css3# box-sizing
    #DOM# 最佳实践:head里面标签的顺序
  • 原文地址:https://www.cnblogs.com/noear/p/14647172.html
Copyright © 2011-2022 走看看