Spring Boot & Cloud 輕量替代框架 Solon 1.3.37 發布
- 2021 年 5 月 13 日
- 筆記
- solon, solon cloud, springboot, 分散式鎖, 微服務
Solon 是一個微型的Java開發框架。強調,克制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Micro service、WebSocket、Socket 等多種開發模式。
Solon Cloud 是一系列的介面標準和配置規範,算是 Solon 的分散式開發套件方案。
快速了解Solon的材料:
《Solon 特性簡集,相較於 Springboot 有什麼區別?》
《Solon Cloud 分散式服務開發套件清單,感覺受與 Spring Cloud 的不同》
所謂更小:
內核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.extend.jsr303 組件,支援 jsr303 bean驗證能力
Solon 原有的驗證體系是基於 Context 的,基於方法或參數的驗證。現在算是補齊了 Bean 或 Model 的驗證能力。
@Valid
@Controller
public class ValidController {
//這是基於 context 的驗證體系(可以批量驗證參數)
@NotZero({"val1", "val2"})
@Mapping("nzero")
public String nzero(int val1, int val2) {
return "OK";
}
//這也是基於 context 的驗證體系
@Mapping("size")
public String size(@Length(min = 2, max = 5, message = "測試") String val1,
@Length(min = 2, max = 5, message = "測試") String val2) {
return "OK";
}
//這是基於 bean 的驗證體系(@Validated,這個註解加上代表要驗證這個模型參數)
@Mapping("bean")
public String bean(@Validated ValidModel model) {
return "OK";
}
}
//申明可驗證的模型
@Data
public class ValidModel {
@NotBlank(message = "手機號不能為空")
private String mobile;
@NotBlank(message = "密碼不能為空")
private String password;
}
2、增加 solon.cache.spymemcached 分散式快取組件,提供 solon cache 的實現支援
配置:(Solon 的快取註解,默認是不需要配置快取服務的。默認會提供本地快取服務)
solon.app:
name: demoapp
group: demo
cache1:
server: memcached.water.io:11211 #具體需要哪些配置,可以看下 MemCacheService 的類實現
user: memcached
程式碼:
//組件配置
@Configuration
public class Config {
@Bean
public CacheService cache(@Inject("${cache1}") MemCacheService cache){
return cache;
}
}
//使用
@Controller
public class CacheController {
/**
* 執行結果快取10秒,並添加 test_${label} 和 test1 標籤
* */
@Cache(tags = "test_${label},test1" , seconds = 60)
@Mapping("/cache/")
public Date test(int label) {
return new Date();
}
/**
* 執行後,清除 標籤為 test 的快取(不過,目前沒有 test 的示簽...)
* */
@CachePut(tags = "test1")
@Mapping("/cache/update")
public Date update() {
return new Date();
}
/**
* 執行後,清除 標籤為 test_${label} 的快取
* */
@CacheRemove(tags = "test_${label}")
@Mapping("/cache/remove")
public String remove(int label) {
return "清除成功-" + new Date();
}
}
3、增加 solon.cache.jedis 分散式快取組件
使用同上
4、優化 solon.logging 內部結構,擴展更自由
例,配置一個新的日誌添加器,指定類名,指定級別:
solon.logging.appender:
test:
class: demo.TestAppender
level: TRACE
定義日誌添加器:
public class TestAppender extends AppenderBase {
@Override
public void append(LogEvent logEvent) {
System.out.println("[Test] " + logEvent.getContent());
}
}
附:生態組件清單
Nami 插件(Solon rpc client) | 說明 |
---|---|
nami插件:: | 說明 |
nami.coder.fastjson | 對fastjson 的編解碼適配 |
nami.coder.hessian | 對hessian 的編解碼適配 |
nami.coder.snack3 | 對snack3 的編解碼適配 |
nami.channel.http.okhttp | 對okhttp 的通道適配 |
nami.channel.socketd | 對socketd 的通道適配(適配後,可使用org.noear:solon.sockted.client.* 做為客戶端) |
Solon 插件 | 說明 |
---|---|
boot插件:: | 說明 |
org.noear:solon.boot.jlhttp* | boot插件,對jlhttp 適配,提供http 服務(不自帶session state) |
org.noear:solon.boot.jetty* | boot插件,對jetty 適配,提供http 服務(網友@khb提供) |
org.noear:solon.extend.jetty.jsp | 擴展插件,為jetty 添加jsp 支援(不建議使用jsp)(網友@khb提供) |
org.noear:solon.boot.undertow* | boot插件,對undertow 適配,提供http 服務(網友@tyk提供) |
org.noear:solon.boot.websocket | boot插件,對java-websocket 適配,提供websocket 服務 |
org.noear:solon.extend.undertow.jsp | 擴展插件,為undertow 添加jsp 支援(不建議使用jsp)(網友@tyk提供) |
靜態文件支援插件:: | 說明 |
org.noear:solon.extend.staticfiles | 擴展插件,添加靜態文件支援(監視 resources/static 文件夾) |
切面支援插件:: | 說明 |
org.noear:solon.extend.aspect | 擴展插件,添加Dao、Service註解支援;進而支援事務和快取註解 |
數據操作支援插件:: | 說明 |
org.noear:solon.extend.data | 擴展插件,實現事務和快取的註解支援 |
驗證支援插件:: | 說明 |
org.noear:solon.extend.validation | 擴展插件,實現驗證的註解支援 |
Yaml配置支援插件:: | 說明 |
org.noear:solon.extend.properties.yaml | 擴展插件,添加yml配置文件支援 |
Data插件:: | 說明 |
org.noear:solon.extend.data | 擴展插件,添加事件(@Tran)、快取(@Cache)支援 |
Cloud插件:: | 說明 |
org.noear:solon.cloud | 擴展插件, 添加Solon Cloud 的介面定義及配置規範 |
Validation插件:: | 說明 |
org.noear:solon.extend.validation | 擴展插件,添加驗證(@Valid)支援 |
Cache插件:: | 說明 |
org.noear:solon.cache.spymemcached | 擴展插件,完成memcached的快取服務適配 |
org.noear:solon.solon.cache.jedis | 擴展插件,完成redis的快取服務適配 |
jsr插件:: | 說明 |
org.noear:solon.extend.jsr303 | 擴展插件,完成jsr303 bean 驗證支援 |
org.noear:solon.extend.jsr330 | 擴展插件,完成jsr330 組件與注入支援 |
跨域插件:: | 說明 |
org.noear:solon.extend.cors | 擴展插件,完成web跨域註解支援 |
Session插件:: | 說明(可將boot插件的session state服務,自動換掉) |
org.noear:solon.extend.sessionstate.jwt | 擴展插件,分散式session (基於jwt 構建) |
org.noear:solon.extend.sessionstate.local | 擴展插件,本地session |
org.noear:solon.extend.sessionstate.redis | 擴展插件,分散式session (其於redis 構建) |
日誌插件:: | 說明 |
org.noear:solon.logging | 擴展插件,添加日誌支援 |
org.noear:solon.logging.impl | 擴展插件,添加Slf4j日誌支援 |
序列化插件:: | 說明 |
org.noear:solon.serialization.fastjson* | 序列化插件,對 fastjson 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.snack3* | 序列化插件,對 snack3 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.hession* | 序列化插件,對 hession 適配,提供 hession 序列化輸出 |
org.noear:solon.serialization.jackson | 序列化插件,對 jackson 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.protostuff | 序列化插件,對 protostuff 適配,提供protostuff 視圖輸出 或 序列化輸出 |
視圖插件:: | 說明(可置多個視圖插件) |
org.noear:solon.view.freemarker* | 視圖插件,對 freemarker 適配,提供html 視圖輸出 |
org.noear:solon.view.jsp | 視圖插件,對 jsp 適配,提供html 視圖輸出 |
org.noear:solon.view.velocity | 視圖插件,對 velocity 適配,提供html 視圖輸出 |
org.noear:solon.view.thymeleaf | 視圖插件,對 thymeleaf 適配,提供html 視圖輸出 |
org.noear:solon.view.beetl | 視圖插件,對 beetl 適配,提供html 視圖輸出 |
org.noear:solon.view.enjoy | 視圖插件,對 enjoy 適配,提供html 視圖輸出 |
Solon SocketD 插件 | 說明 |
---|---|
SocketD boot插件:: | 說明 |
org.noear:solon.boot.socketd.jdksocket | sockted boot插件,對jdksocket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.netty | sockted boot插件,對netty 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.rsocket | sockted boot插件,對rsocket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.smartsocket | sockted boot插件,對smart-socket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.websocket | sockted boot插件,對websocket 適配,提供socketd 服務 |
SocketD client 插件:: | 說明 |
org.noear:solon.sockted | 擴展插件,sockted 協議的編解碼、會話等基礎支援 |
org.noear:solon.sockted.client.jdksocket | 擴展插件,sockted 協議的 jdksocket 客戶端適配 |
org.noear:solon.sockted.client.netty | 擴展插件,sockted 協議的 netty 客戶端適配 |
org.noear:solon.sockted.smartsocket | 擴展插件,sockted 協議的 smartsocket 客戶端適配 |
org.noear:solon.sockted.websocket | 擴展插件,sockted 協議的 websocket 客戶端適配 |
其它擴展插件 | 說明 |
---|---|
org.noear:beetlsql-solon-plugin | beetlsql 適配插件 |
org.noear:mybatis-solon-plugin | mybatis 適配插件 |
org.noear:mybatis-sqlhelper-solon-plugin | mybatis-sqlhelper 適配插件 |
org.noear:weed3-solon-plugin | weed3 適配插件 |
org.noear:cron4j-solon-plugin | cron4j 適配插件 |
org.noear:quartz-solon-plugin | quartz 適配插件 |
org.noear:dubbo-solon-plugin | dubbo 適配插件 |
org.noear:feign-solon-plugin | feign 適配插件 |
org.noear:hasor-solon-plugin | hasor 適配插件 |
org.noear:luffy-solon-plugin | luffy 適配插件 |
org.noear:sureness-solon-plugin | sureness 適配插件 |
org.noear:solon-springboot-starter | springboot 適配插件 |
Solon Cloud 插件 | 說明 |
---|---|
org.noear:consul-solon-plugin | consul 適配插件(支援Solon cloud 配置服務、註冊與發現服務) |
org.noear:nacos-solon-plugin | nacos 適配插件(支援Solon cloud 配置服務、註冊與發現服務) |
org.noear:zookeeper-solon-plugin | zookeeper 適配插件(支援Solon cloud 配置服務、註冊與發現服務) |
org.noear:water-solon-plugin | water 適配插件(支援Solon cloud 配置、註冊與發現、事件、日誌、跟蹤、等服務) |
org.noear:rabbitmq-solon-plugin | rabbitmq 適配插件(支援Solon cloud 事件匯流排服務) |
org.noear:rocketmq-solon-plugin | rocketmq 適配插件(支援Solon cloud 事件匯流排服務) |
org.noear:mqtt-solon-plugin | mqtt 適配插件(支援Solon cloud 事件匯流排服務) |
org.noear:kafka-solon-plugin | kafka 適配插件(支援Solon cloud 事件匯流排服務) |
org.noear:guava-solon-plugin | guava 適配插件(支援Solon cloud 融斷服務) |
org.noear:sentinel-solon-plugin | sentinel 適配插件(支援Solon cloud 融斷服務) |
org.noear:semaphore-solon-plugin | semaphore 適配插件(支援Solon cloud 融斷服務) |
org.noear:aliyun-oss-solon-plugin | aliyun-oss 適配插件(支援Solon cloud 分散式文件服務) |
org.noear:aws-s3-solon-plugin | aws-s3 適配插件(支援Solon cloud 分散式文件服務) |
org.noear:snowflake-id-solon-plugin | snowflake 演算法適配插件(支援Solon cloud 分散式ID服務) |
附:項目地址
- Gitee://gitee.com/noear/solon
- Github://github.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