在現代企業級應用中,事件驅動架構(EDA)已成為解耦系統、提升擴展性的利器。今天給大家推薦一個非常優秀的國產輕量級事件驅動框架 —— Hibiscus Signal,它不僅天然整合 Spring Boot,還提供完整的事件生命周期支持,是替代原生 ApplicationEvent
和簡化異步邏輯的不二之選。
一、為什么選擇 Hibiscus Signal?
相比 Spring 原生事件模型(如 ApplicationEventPublisher
)使用麻煩、缺乏鏈式控制,Hibiscus Signal 提供了以下核心優勢:
特性 | 說明 |
---|---|
注解驅動 | 使用 @SignalEmitter 和 @SignalHandler 快速標記事件 |
攔截器鏈 | 在事件發出前/后執行攔截邏輯(如日志、權限) |
過濾器鏈 | 控制事件是否傳播 |
轉換器鏈 | 動態修改事件參數(如數據脫敏) |
上下文共享 | SignalContext 實現跨組件數據傳遞 |
異步處理 | 內置線程池 + 自定義執行器 |
指標統計 | 實時掌握事件執行情況 |
Spring 完美集成 | 自動注冊 + 注解配置,無侵入接入 |
二、如何快速上手?
1. 添加依賴
在你的 Spring Boot 項目中引入 Maven 依賴:
<dependency><groupId>io.github.heathcetide</groupId><artifactId>cetide.hibiscus.signal</artifactId><version>1.0.4</version>
</dependency>
2. 發出一個信號事件
@RestController
public class AuthController {@PostMapping("/login")@SignalEmitter("user.login") // 標記為事件發射器public String login(@RequestBody LoginRequest request, HttpServletRequest httpRequest) {User user = doLogin(request); // 登錄邏輯SignalContextCollector.collect("user", user);SignalContextCollector.collect("request", httpRequest);return "JWT-TOKEN";}
}
3. 監聽事件并處理
@Component
public class UserEventHandler {@SignalHandler(value = "user.login",target = UserEventHandler.class,methodName = "handleLogin",async = true)public void handleLogin(SignalContext context) {User user = (User) context.getIntermediateValues().get("user");// 發送歡迎郵件 / 記錄登錄日志log.info("歡迎用戶 {} 登錄系統", user.getUsername());}
}
三、進階用法:攔截器 + 過濾器 + 轉換器
攔截器:登錄前記錄操作日志
@Component
@SignalInterceptorBind({"user.login", "user.logout"})
public class AuditInterceptor implements SignalInterceptor {@Overridepublic boolean beforeHandle(String event, Object sender, Object... params) {SignalContext context = (SignalContext) params[0];HttpServletRequest request = (HttpServletRequest) context.getIntermediateValues().get("request");log.info("用戶操作事件: {} from IP: {}", event, request.getRemoteAddr());return true; // 返回 false 則阻止傳播}
}
過濾器:權限校驗
@Component
@SignalFilterBind("secure.*")
public class SecurityFilter implements SignalFilter {@Overridepublic boolean filter(String event, Object sender, Object... params) {SignalContext context = (SignalContext) params[0];return checkPermission(context.getAttributes()); // true=允許,false=阻止}
}
轉換器:脫敏數據
@Component
@SignalTransformerBind("user.*")
public class DataMaskTransformer implements SignalTransformer {@Overridepublic Object[] transform(String event, Object sender, Object... params) {User user = (User) params[0];user.setPassword("******"); // 脫敏return new Object[]{user};}
}
四、自定義線程池支持
為了讓異步事件更高效可控,框架支持配置線程池:
@Configuration
public class SignalExecutorConfig {@Bean("signalExecutor")public ExecutorService signalExecutor() {return new ThreadPoolExecutor(4, 8, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(200),new ThreadFactoryBuilder().setNameFormat("signal-pool-%d").build());}
}
五、實時監控事件執行情況
你還可以隨時查看事件的執行次數、失敗率等指標:
@Autowired
private Signals signals;public void printStats() {Map<String, Map<String, Object>> metrics = signals.getMetrics().getAllMetrics();metrics.forEach((event, stats) -> {System.out.println(event + " 執行次數: " + stats.get("emitCount"));});
}
六、版本更新日志(部分節選)
-
v1.0.4
:支持注解自動注冊組件(攔截器、過濾器、轉換器) -
v1.0.3
:增加上下文收集器,解決早期 null 問題 -
v1.0.2
:引入全生命周期管理、優先級控制 -
v1.0.1
:基礎 API 搭建,支持異步、同步事件流
七、總結
Hibiscus Signal 是一個對開發者非常友好的事件處理框架,真正做到了:
-
使用簡單:幾行注解就能完成復雜事件流
-
功能強大:支持完整的事件管道(攔截/過濾/轉換/回調)
-
與 Spring 深度融合:無縫集成,無學習成本
-
輕量靈活:沒有復雜依賴,適合中小項目和大型平臺
項目地址
項目已開源,歡迎大家試用、Star、提 issue:
GitHub:GitHub - heathcetide/hibiscus-signal: Hibiscus Signal - Hibiscus Signal is a robust event-driven system designed to manage signals, events, and handlers in a highly flexible and scalable way. process events asynchronously or synchronously, and manage event-based workflows with advanced features such as interceptors, filters, transformers, and metrics collection.
Maven:查看中央倉庫
如果你也在用 Spring 構建分層架構、做用戶行為追蹤、審計日志、領域事件等,強烈推薦你嘗試下 Hibiscus Signal!
一行注解,開啟優雅事件世界。