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); 5、取消 HandlerLink 类,增加 HandlerPipeline 类 此例代码摘自组件 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()); 附:入门示例 项目地址:https://gitee.com/noear/solon 入门教程示例:https://gitee.com/noear/solon_demo RPC入门教程示例:https://gitee.com/noear/solon_rpc_demo 进阶教程示例:https://gitee.com/noear/solon_advance_demo