Solon 是一個輕量的Java基礎開發框架。強調,剋制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多種開發模式。短小而精悍!
Solon Cloud 是一系列的介面標準和配置規範,算是 Solon 的分散式開發套件方案。
快速瞭解Solon的材料:
《Solon 特性簡集,相較於 Springboot 有什麼區別?》
《Solon Cloud 分散式服務開發套件清單,感覺受與 Spring Cloud 的不同》
《Solon 生態外掛清單》,目前已有100多個生態外掛
所謂更小:
核心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、增加新的外掛適配
- 新增 opentracing-solon-plugin 外掛。可快速對接所有支援 opentracing 的鏈路跟蹤產品。下面以 Jaeger 對接為例:
@Configuration
public class Config {
@Bean
public Tracer tracer() throws TTransportException {
Reporter reporter = new RemoteReporter.Builder()
.withSender(new UdpSender(AGENT_HOST, AGENT_PORT, 0))
.withFlushInterval(10)
.build();
return new JaegerTracer.Builder(Solon.cfg().appName())
.withReporter(reporter)
.withExpandExceptionLogs()
.withSampler(new ConstSampler(true)).build();
}
}
2、優化 Nami 內部結構(不影響外部呼叫)
- 優化 Nami Filter;改為鏈式過濾;並新增 Invocation 做為配套
- 拆分 Nami.Builder 為獨立的 NamiBuilder 類
- 取消 Decoder, Encoder, Channel 對 Filter 的繼承;改為更明確的 pretreatment 預處理介面
- 移動 Result 到 nami 一級包目錄
- 簡化 Naimi 的附件模式。改由 NamiAttachment 直接操控
總體來說,是簡化和增強了 Nami 的過濾及附件能力。例:
//過濾能力
@Component
public class NamiFilterAdapter implements Filter { //這是Nami的過濾器介面
@Override
public Result doFilter(Invocation inv) throws Throwable {
inv.headers.put("token","1");
System.out.println("我給 Nami 加了個頭資訊!");
return inv.invoke();
}
}
//附件能力
@Controller
public class Demo {
@NamiClient
HelloService helloService;
@Mapping("/")
public void test() {
//新增附件:token=aaa (最終會做為 header 傳給 server)
NamiAttachment.put("Token","5643c10c-87c3-4b7e-bd26-30cf2456aad8");
//helloService 的 remoting server ,需要有 token 認證
helloService.hello("noear");
}
}
3、增強部分介面及相關配置能力
- 增加 Solon Filter 序號位支援
- 增加 Solon Props::getByParse 介面,可應對組合配置需要。例:
Hello ${user.name}
這樣的配置需求 - 增加 CloudJobHandler 介面,讓 Job Handler 更清晰些
- 增加 Solon Auth 新註解:
@AuthIp
,@AuthPath
支援 - 增加 CloudConfig 的註解內容,支援 ${xx}yyy 風格配置
- 增加 CloudEvent 的註解內容,支援 ${xx}yyy 風格配置
- 增加 CloudJob 的註解內容,支援 ${xx}yyy 風格配置
- 增加 CloudBreaker 的註解內容,支援 ${xx}yyy 風格配置
- 增加 @Component 單例元件通過 EventBus 擴充套件的機制
- 增加 env 啟動引數切換配置檔案;例:java -jar xxx.jar -env=test
- 標註 Utils::throwableWrap 函式為棄用,並調整內部異常包裝處理
- 限制 DataThrowable 被最終渲染
- 取消 WarnThrowable
4、日誌對接進一步增加
Solon 的日誌體系,除自有 slf4j 實現之後;還適配有 Logback 的新增器;現增加 Log4j 新增器的適配。
附:專案地址
附:入門示例
- 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