当前位置: 首页 > news >正文

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

在现代企业级应用中,事件驱动架构(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

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

http://www.xdnf.cn/news/497665.html

相关文章:

  • 【C++ Qt】布局管理器
  • redis的pipline使用结合线程池优化实战
  • Java大师成长计划之第25天:Spring生态与微服务架构之容错与断路器模式
  • Qt 强大的窗口停靠浮动
  • Javascript:WebAPI
  • React Fiber 架构深度解析:时间切片与性能优化的核心引擎
  • ARM (Attention Refinement Module)
  • spring -MVC-02
  • DeepSeek赋能电商,智能客服机器人破解大型活动人力困境
  • 数组集合互转问题
  • Ubuntu 安装 squid
  • 服装零售逆势密码:从4月英国7%增长看季节性消费新模型
  • 中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
  • 一个指令,让任意 AI 快速生成思维导图
  • Unity序列化字段、单例模式(Singleton Pattern)
  • 通俗版解释CPU、核心、进程、线程、协程的定义及关系
  • 动态规划-64.最小路径和-力扣(LetCode)
  • c#车检车构客户管理系统软件车辆年审短信提醒软件
  • 系统架构设计(九):分布式架构与微服务
  • pytorch小记(二十二):全面解读 PyTorch 的 `torch.cumprod`——累积乘积详解与实战示例
  • Java求职面试:从核心技术到大数据与AI的场景应用
  • [Android] 安卓彩蛋:Easter Eggs v3.4.0
  • 第五项修炼:打造学习型组织
  • 前端基础之CSS
  • 大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化
  • 【诊所电子处方专用软件】佳易王个体诊所门诊电子处方开单管理系统:零售药店电子处方服务系统#操作简单#诊所软件教程#药房划价
  • Java 快速转 C# 教程
  • 30、WebAssembly:古代魔法——React 19 性能优化
  • 手撕四种常用设计模式(工厂,策略,代理,单例)
  • 设计模式Java