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元件內部機制
附:入門示例
- 專案地址: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