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

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


一、为什么选择 Hibiscus Signal?

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

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

二、如何快速上手?

1. 添加依赖

在你的 Spring Boot 项目中引入 Maven 依赖:

XML 复制代码
<dependency>
    <groupId>io.github.heathcetide</groupId>
    <artifactId>cetide.hibiscus.signal</artifactId>
    <version>1.0.4</version>
</dependency>

2. 发出一个信号事件

java 复制代码
@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. 监听事件并处理

java 复制代码
@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());
    }
}

三、进阶用法:拦截器 + 过滤器 + 转换器

拦截器:登录前记录操作日志

java 复制代码
@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 则阻止传播
    }
}

过滤器:权限校验

java 复制代码
@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=阻止
    }
}

转换器:脱敏数据

java 复制代码
@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};
    }
}

四、自定义线程池支持

为了让异步事件更高效可控,框架支持配置线程池:

java 复制代码
@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()
        );
    }
}

五、实时监控事件执行情况

你还可以随时查看事件的执行次数、失败率等指标:

java 复制代码
@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:

GitHubGitHub - 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

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

相关推荐
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
灯澜忆梦8 小时前
GO_并发编程---定时器
开发语言·后端·golang
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-8 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-9 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化