Release Notes
- 1、【新增】JsonRpc模塊:一個輕量級、跨語言遠程過程調用實現,基于json、http實現(從XXL-JOB底層通訊組件提煉抽象)。
- 2、【新增】Concurrent模塊:一系列并發編程工具,具備良好的線程安全、高并發及高性能優勢,包括CyclicThread(循環線程)、MessageQueue(高性能內存隊列,30W+ TPS)等。
- 3、【新增】Auth模塊:一系列權限認證相關工具,包括JwtTool等。
- 4、【強化】已有工具能力完善,包括 CollectionTool、MapTool、HttpTool 等;
- 5、【升級】升級依賴版本,包括 slf4j、poi、spring、gson、junit等。
簡介
XXL-TOOL 是一個Java工具類庫,致力于讓Java開發更高效。包含 “集合、字符串、緩存、IO、并發、Excel、Emoji、Response、Pipeline、Http、Json、JsonRpc、Encrypt、Auth……” 等數十個模塊。
文檔地址
- 中文文檔:https://www.xuxueli.com/xxl-tool/
- Github:https://github.com/xuxueli/xxl-tool
組件列表
模塊 | 說明 |
---|---|
Core模塊 | 包含集合、緩存、日期……等基礎組件工具。 |
IO模塊 | 一系列處理IO(輸入/輸出)操作的工具。 |
Concurrent模塊 | 一系列并發編程工具,具備良好的線程安全、高并發及高性能優勢,包括MessageQueue(高性能內存隊列,30W+ TPS)、CyclicThread(后臺循環線程)、TimeWheel(時間輪組件)等。 |
Http模塊 | 一系列處理Http通訊、IP、Cookie等相關工具。 |
Gson模塊 | json序列化、反序列化工具封裝,基于Gson。 |
Excel模塊 | 一個靈活的Java對象和Excel文檔相互轉換的工具。一行代碼完成Java對象和Excel之間的轉換。 |
Emoji模塊 | 一個靈活可擴展的Emoji表情編解碼庫,可快速實現Emoji表情的編解碼。 |
JsonRpc模塊 | 一個輕量級、跨語言遠程過程調用實現,基于json、http實現(對比傳統RPC框架:XXL-RPC)。 |
Response模塊 | 統一響應數據結構體,標準化數據結構、狀態碼等,降低協作成本。 |
Pipeline模塊 | 高擴展性流程編排引擎。 |
Exception模塊 | 異常處理相關工具。 |
Freemarker模塊 | 模板引擎工具,支持根據模板文件實現 動態文本生成、靜態文件生成 等,支持郵件發送、網頁靜態化場景。 |
Encrypt模塊 | 一系列處理編解碼、加解密的工具,包括 Md5Tool、HexTool、Base64Tool…等。 |
Auth模塊 | 一系列權限認證相關工具,包括JwtTool…等。 |
… | … |
代碼示例:JsonRpc 用法
一個輕量級、跨語言遠程過程調用實現,基于json、http實現。
第一步:RPC業務服務開發
public interface UserService {public ResultDTO createUser(UserDTO userDTO);public UserDTO loadUser(String name);... ...
}
第二步:JsonRpc服務端配置
// a、JsonRpcServer 初始化
JsonRpcServer jsonRpcServer = new JsonRpcServer();// b、業務服務注冊(支持多服務注冊)
jsonRpcServer.register("userService", new UserServiceImpl());// c、Web框架集成,該入口為RPC統一流量入口(springmvc 集成;理論上支持任意web框架集成,其他框架參考集成)
@RequestMapping("/openapi")
@ResponseBody
public String api(@RequestBody(required = false) String requestBody){// 核心代碼:Http請求的 RequestBody 作為入參;業務響應作為輸出;return jsonRpcServer.invoke(requestBody);
}
第三步:JsonRpc客戶端配置
// 方式1:代理方式使用 (針對接口構建代理,通過代理對象實現遠程調用;)
UserService userService = new JsonRpcClient("http://localhost:8080/jsonrpc", 3000).proxy("userService", UserService.class);// 發起RPC請求;
UserDTO result = userService.loadUser("zhangsan");
代碼示例:MessageQueue(高性能內存隊列)
高性能內存隊列,單機支持 30W+ TPS,具備良好的性能及高并發優勢,支持生產消費模型。
// a、定義隊列:指定 消費者數量、批量消費數量、消費者邏輯等
MessageQueue<String> messageQueue = new MessageQueue<>("demoQueue",messages -> { // 消費邏輯System.out.println("Consume: " + messages);},10, // 自定義消費者線程20 // 自定義批量消費數量
);// b、生產消息
messageQueue.produce("test-" + i);
代碼示例:TimeWheel(時間輪)
時間輪算法實現,具備高精度、多任務、以及線程安全等優勢。
// a、時間輪定義,自定義時間輪刻度、間隔等
TimeWheel timeWheel = new TimeWheel(60, 1000);// b、提交時間輪任務(定時任務)
timeWheel.submitTask(System.currentTimeMillis() + 3000, () -> {System.out.println("Task delay " + waitTime + "ms executed at: " );
});
代碼示例:Jwt權限認證
JWT工具,提供JWT生成及解析能力
// a、JwtTool 初始化,自定義 Signer和 Verifier
JwtTool jwtTool = new JwtTool(SECRET); // 默認使用 MACSigner/MACVerifier,支持多構造方法自定義實現;// b、創建token
String token = jwtTool.createToken({用戶標識},{自定義聲明數據,map形式},{自定義過期時間});// c、驗證token
boolean isValid = jwtTool.validateToken(token);
// d、獲取claim
Object userId = jwtTool.getClaim(token, {自定義聲明數據key});
// e、獲取過期時間
Date expirationTime = jwtTool.getExpirationTime(token);