對標 Spring Boot & Cloud ,輕量框架 Solon 1.4.12 發布


Solon 是一個輕量的Java基礎開發框架。強調,克制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支持:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多種開發模式。短小而精悍!

Solon Cloud 是一系列的接口標准和配置規范,算是 Solon 的分布式開發套件方案。

快速了解Solon的材料:

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

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

《Solon 的想法與架構筆記》

《Solon 生態插件清單》,目前已有100多個生態插件

《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、增加新的插件適配

  • 添加 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 添加器的適配。

附:項目地址

附:入門示例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM