分散式任務框架
首先說這個框架的目前的應用場景:
例如:美團想要獲取七天酒店的信息,而且這個請求量特別大,但是卻不要求是及時響應,可以非同步完成。根據這個需求我們大致可以確定採用什麼技術方案,可以採用隊列來完成這個過程,但是如果僅僅是隊列來實現的話,又有些問題。
比如我想實現以下這些功能:
1.如果這個請求我想寫入日誌
2.我想根據請求類型做不同的異常拋出
3.我想在這個過程中實現RPC調用請求一些特定的介面數據
4.我想實現同一套程序多個實例運行定時任務和隊列任務等
基於這種應用場景,我們將上面幾種功能整合到一個包,這個包在這裡就叫做分散式任務框架。
分散式任務框架具體功能如下:
1. 基於spring boot實現,依賴rabbitMQ,mysql,redis,influxdb。
2. 完全分散式,支持混合雲,可指定主機或指定集群運行。
3. 支持定時任務,並支持服務端動態配置。
4. 支持基於隊列分發任務,支持錯誤重試,並支持服務端動態配置。
5. 支持RPC風格調用,支持錯誤重試,並支持伺服器端動態配置。
5. 支持多種規則的任務報警。
6. 支持同一套程序多個實例運行定時任務和隊列任務。
分散式任務框架實現原理:
1.採用java監聽者模式監聽隊列是否執行,如果執行則觸發日誌
2.採用Spring自帶的Scheduled、TaskScheduler實現多線程定時任務
3.基於redis實現的分散式序列的生成
4.定義自己的異常類,來實現不同調度任務,返回不同的異常信息
5.基於SpringBoot集成MQ、Redis、Guava
6.採用AtomicBoolean、ConcurrentHashMap實現多線程安全
7.隊列的請求和返回參數採用泛型實現,以適配各種各樣的數據源
8.使用RateLimiter進行隊列限流
有興趣想要進一步研究的話,可以下載下面的源代碼。
GitHub地址:https://github.com/1913045515/task/tree/master/task
※約翰·克利斯朵夫奮鬥的一生
※曾經的麥迪接班人,後仰跳投美如畫
TAG:全球大搜羅 |