涪陵网站建设 优帮云,最新网站开发工具,网站后台的关键词,住房和城乡建设部网站科技项目在现代企业级应用中#xff0c;事件驱动架构#xff08;EDA#xff09;已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal#xff0c;它不仅天然整合 Spring Boot#xff0c;还提供完整的事件生命周期支持事件驱动架构EDA已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal它不仅天然整合 Spring Boot还提供完整的事件生命周期支持是替代原生 ApplicationEvent 和简化异步逻辑的不二之选。 一、为什么选择 Hibiscus Signal
相比 Spring 原生事件模型如 ApplicationEventPublisher使用麻烦、缺乏链式控制Hibiscus Signal 提供了以下核心优势
特性说明注解驱动使用 SignalEmitter 和 SignalHandler 快速标记事件拦截器链在事件发出前/后执行拦截逻辑如日志、权限过滤器链控制事件是否传播转换器链动态修改事件参数如数据脱敏上下文共享SignalContext 实现跨组件数据传递异步处理内置线程池 自定义执行器指标统计实时掌握事件执行情况Spring 完美集成自动注册 注解配置无侵入接入 二、如何快速上手
1. 添加依赖
在你的 Spring Boot 项目中引入 Maven 依赖
dependencygroupIdio.github.heathcetide/groupIdartifactIdcetide.hibiscus.signal/artifactIdversion1.0.4/version
/dependency2. 发出一个信号事件
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() {MapString, MapString, 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 一行注解开启优雅事件世界。