Spring Boot & Cloud 輕量替代框架 Solon 1.3.37 釋出

劉之西東 發表於 2021-05-13

Solon 是一個微型的Java開發框架。強調,剋制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Micro service、WebSocket、Socket 等多種開發模式。

Solon Cloud 是一系列的介面標準和配置規範,算是 Solon 的分散式開發套件方案。

快速瞭解Solon的材料:

《Solon 特性簡集,相較於 Springboot 有什麼區別?》

《Solon Cloud 分散式服務開發套件清單,感覺受與 Spring Cloud 的不同》

《Solon 的想法與架構筆記》

《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.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服務)

附:專案地址

附:入門示例