轻量、优雅、高扩展的事件驱动框架——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

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

相关推荐
努力也学不会java3 分钟前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿26 分钟前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
学亮编程手记30 分钟前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
Haven-2 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋2 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
wjs0402 小时前
Git常用的命令
java·git·gitlab
superlls2 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
honder试试2 小时前
焊接自动化测试平台图像处理分析-模型训练推理
开发语言·python
^Rocky3 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
田里的水稻3 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法