1. 程式人生 > >Java RPC 框架 Solon 1.3.9 釋出,更便利的支援

Java RPC 框架 Solon 1.3.9 釋出,更便利的支援

Solon 是一個微型的Java RPC開發框架。專案從2018年啟動以來,參考過大量前人作品;歷時兩年,4000多次的commit;核心保持0.1m的身材,超高的跑分,良好的使用體驗。支援:RPC、REST API、MVC 等多種開發模式。 Solon 強調:剋制 + 簡潔 + 開放的原則;力求:更小、更快、更自由的體驗。 #### 專案地址: [https://gitee.com/noear/solon](https://gitee.com/noear/solon) #### 所謂更小: 核心0.1m,最小開發單位0.2m(相比Dubbo、Springboot專案包,小到可以乎略不計) #### 所謂更快: 本機helloworld測試,Qps可達12萬之多。可參考:《[helloworld_wrk_test](https://gitee.com/noear/helloworld_wrk_test)》 #### 所謂更自由:(程式碼操控自由) ```java // 除了註解模式之外,還可以按需手動 // //手動獲取配置(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); ``` #### 本次版本重大變更: ### 1、增加 solon.extend.sessionstate.jwt 元件,以使用session state 的方式,使用 jwt.token 此元件有兩種應用場景:1)做管理後臺的Session State,實現分散式Session的效果;2)做為介面的身份令牌 * 通過Cookie方式,做為管理後臺的Session State;從而讓方便管理後臺叢集部署(用 solon.extend.sessionstate.redis 也能幹這事兒) ```yml Set-Cookie: TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1NzEwNzAsImp0aSI6ImQ1Zjk5ZTk2MzA3NzRiNGZhNjRmNDJlMWIyNjQ0YjNkIiwiYmNmZG9ja19WYWxpZGF0aW9uX1N0cmluZyI6Ijl0MjIifQ._XY2p5IvItzL3xm3Iz6g2d1KpJG3y3cTn43uaM0dPS0;path=/;max-age=7200;domain=admin.demo.net; ``` * 通過Header方式,做為介面的身份令牌(通過配置,將jwt轉到header上) ```yml server.session: timeout: 7200 state.jwt: requestUseHeader: true responseUseHeader: true ``` 使用demo ```java @Component(tag = "api") public class API_login_test extends ApiBase { @Logined @Mapping("login.test") public Result exec(Context ctx){ //獲取會話狀態(與常規session state一樣操作) long user_id = ctx.session("user_id", 0); //設定會話狀態 ctx.sessionSet("user_id", 100); return Result.succeed(); } } ``` ```yml TOKEN: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTQ1NzEwNzAsImp0aSI6ImQ1Zjk5ZTk2MzA3NzRiNGZhNjRmNDJlMWIyNjQ0YjNkIiwiYmNmZG9ja19WYWxpZGF0aW9uX1N0cmluZyI6Ijl0MjIifQ._XY2p5IvItzL3xm3Iz6g2d1KpJG3y3cTn43uaM0dPS0;path=/;max-age=7200;domain=admin.demo.net; ``` ### 2、增加便利的檔案下載支援(是下載,不是上傳) ```java @Controller public class Demo{ @Mapping("/file/down1") public void down1(Context ctx, String fileName){ File file = new File(fileName); //通過上下文介面,輸出下載檔案 ctx.outputAsFile(file); } @Mapping("/file/down2") public File down1(String fileName){ File file = new File(fileName); //通過MVC返回File,輸出下載檔案 return file; } } ``` ### 3、增加 @Logined 登入驗證註解 ```java // // 如果未登入,則會提示出錯(登入時,將使用者id寫入session state記錄中) // @Controller public class Demo{ @Logined @Mapping("/file/api1") public Result api1(){ return Result.succeed(); } } ``` ### 4、增加 solon.app.title 常態配置,便於管理後臺的標題顯示 ```java //通過 Solon.cfg().appTitle() 介面獲取 ``` ### 5、調整 Result 的預設成功碼為200,預設失敗碼為400(借用http的狀態碼) 使用 Result 做為簡單介面開發的統一格式輸出,是非常友好的選擇。類似: ```java @Controller public class Demo{ @Mapping("/file/api1") public Result api1(){ //直接返回成功結果:{cpde:200, description:"succeed"} return Result.succeed(); } @Mapping("/file/api2") publi