轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal

139 阅读3分钟

在现代企业级应用中,事件驱动架构(EDA)已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal,它不仅天然整合 Spring Boot,还提供完整的事件生命周期支持,是替代原生 ApplicationEvent 和简化异步逻辑的不二之选。

一、为什么选择 Hibiscus Signal? 相比 Spring 原生事件模型(如 ApplicationEventPublisher)使用麻烦、缺乏链式控制,Hibiscus Signal 提供了以下核心优势:

特性 说明 注解驱动 使用 @SignalEmitter 和 @SignalHandler 快速标记事件 拦截器链 在事件发出前/后执行拦截逻辑(如日志、权限) 过滤器链 控制事件是否传播 转换器链 动态修改事件参数(如数据脱敏) 上下文共享 SignalContext 实现跨组件数据传递 异步处理 内置线程池 + 自定义执行器 指标统计 实时掌握事件执行情况 Spring 完美集成 自动注册 + 注解配置,无侵入接入 二、如何快速上手?

  1. 添加依赖 在你的 Spring Boot 项目中引入 Maven 依赖:
io.github.heathcetide cetide.hibiscus.signal 1.0.4 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 {

@Override
public 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 {

@Override
public 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 {

@Override
public 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.com/heathcetide…

Maven:central.sonatype.com/artifact/io…

如果你也在用 Spring 构建分层架构、做用户行为追踪、审计日志、领域事件等,强烈推荐你尝试下 Hibiscus Signal!

一行注解,开启优雅事件世界。