Spring Boot 輕量替代框架 Solon 1.3.29 發布
- 2021 年 4 月 30 日
- 筆記
- JAVA, solon cloud, springboot, WEB, 微服務
Solon 是一個微型的Java開發框架。項目2018年啟動,參考過大量前人作品;內核0.1m的身材,超高的跑分,以及良好的使用體驗。支援:RPC、REST API、MVC、WebSocket、Socket 等多種開發模式。
Solon 強調:剋制 + 簡潔 + 開放的原則;力求:更小、更快、更自由的體驗。
替代?那有什麼異同之處?
《Solon 特性簡集,相較於 Springboot 有什麼區別?》
所謂更小:
內核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組件內部機制
附:入門示例
- 項目地址://gitee.com/noear/solon
- Solon 入門教程示例://gitee.com/noear/solon_demo
- Solon Rpc 入門教程示例://gitee.com/noear/solon_rpc_demo
- Solon Cloud 入門教程示例://gitee.com/noear/solon_cloud_demo
- Solon 進階教程示例://gitee.com/noear/solon_advance_demo