Spring Boot 轻量替代框架 Solon 1.3.29 发布
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); //手动为容器添加组件 Aop.wrapAndPut(DemoService.class); 本次版本主要变化: 1、Solon cloud event 增加通道概念,以支持不同消息队列产品共用 例如一个IoT项目的应用场景:业务消息用RabbitMQ,设备消息用 MQTT。 配置 solon.app: group: demo #配置服务使用的默认组 name: helloproducer #发现服务使用的应用名 solon.cloud.mqtt: server: "tcp://localhost:41883" #mqtt服务地址(默认通道不用命名) solon.cloud.rabbitmq: server: localhost:5672 #rabbitmq 服务地址 username: root #rabbitmq 链接账号 password: 123456 #rabbitmq 链接密码 event: channel: "biz" #对事件服务进行通道命名 生产端代码 @Controller public class TestController { @Mapping("/test") public Object test(String msg) { //发送默认通道 return CloudClient.event().publish(new Event("hello.demo", msg).qos(1).retained(true)); } @Mapping("/test2") public Object test2(String msg) { //发送到biz通道(发送时,增加 channel 信息即可) return CloudClient.event().publish(new Event("hello.demo2", msg).channel("biz")); } } 消费端代码 //订阅并消费默认通道的事件(为了演示把mqtt的消息订阅过来了) @CloudEvent("hello.demo") public class EVENT_hello_demo implements CloudEventHandler { @Override public boolean handler(Event event) throws Throwable { System.out.println(LocalDateTime.now() + ONode.stringify(event)); return true; } } //订阅并消费biz通道的事件 @CloudEvent(value = "hello.demo2", channel = "biz") public class EVENT_hello_demo2 implements CloudEventHandler { @Override public boolean handler(Event event) throws Throwable { System.out.println(LocalDateTime.now() + ONode.stringify(event)); return true; } } 2、Solon cloud breaker 断路器增加动态配置支持 配置 solon.cloud.local: breaker: hello: 1 #断路器名称与阀值 演示代码 @Controller public class DemoController { //此处安排了个断路器(即限流器),如果断路时,会返回HTTP 403状态 @CloudBreaker("hello") @Mapping("/hello") public String hello() { return "hello"; } @Mapping("/reset") public void reset() { //重新设置断路器的阀值(此配置,也可能过配置服务管理;动态更新) Solon.cfg().setProperty("solon.cloud.local.breaker.hello", "10"); } } 3、Solon logging 增加支持有格式化或无格式化的异常打印 Solon logging 是基于 slf4j 的个实现方案,内部对接 Solon cloud log service 接口,从而将日志写到分布式日志服务。 //无格式化场景 log.error("Error: ", e); //格式化场景 log.error("Error: {}", e); 4、增加路由组件切换支持 public class Demo10App { public static void main(String[] args) { Solon.start(Demo10App.class, args, app -> { Router router = new RouterCustom(); //替换路由器 app.routerSet(router); }); } } 5、@Init 增加延时处理机制,并默认为 true @Component public class Demo { @Init public void init(){ } } 6、优化session.jwt组件内部机制 附:入门示例 项目地址:https://gitee.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