JdonFramework 开源项目教程
2024-09-14 23:16:23作者:范垣楠Rhoda
1. 项目介绍
JdonFramework 是一个基于领域驱动设计(Domain-Driven Design, DDD)的发布/订阅(Pub/Sub)领域事件框架。它支持异步编程模型,无需任何消息中间件(如 Apache Kafka 或 RabbitMQ),可以直接将命令传递给领域模型,并监听领域模型中发生的领域事件。JdonFramework 帮助开发者实现一个清晰的六边形架构,将业务逻辑与基础设施分离,适用于构建异步、高并发、高吞吐量的 Java 应用系统。
2. 项目快速启动
2.1 环境准备
- JDK 8 或更高版本
- Maven 3.x
2.2 添加依赖
在项目的 pom.xml 文件中添加 JdonFramework 的依赖:
<dependency>
<groupId>org.jdon</groupId>
<artifactId>jdonframework</artifactId>
<version>6.9</version>
</dependency>
2.3 创建领域模型
创建一个简单的领域模型类 AggregateRootA:
@Model
public class AggregateRootA {
private int state = 100;
@OnCommand("CommandtoEventA")
public Object save(ParameterVO parameterVO) {
// 更新领域模型的状态
this.state = parameterVO.getValue() + state;
return state;
}
}
2.4 发送命令
使用 @Send 注解发送命令:
@Send("CommandtoEventA")
public void sendCommand(ParameterVO parameterVO) {
// 发送命令到领域模型
}
2.5 监听事件
使用 @OnEvent 注解监听领域事件:
@OnEvent("EventA")
public void handleEvent(EventA event) {
// 处理领域事件
}
2.6 运行示例
将上述代码整合到一个简单的应用中,并运行 Maven 打包命令:
mvn package
3. 应用案例和最佳实践
3.1 案例:账户转账
JdonFramework 提供了基于事件溯源(EventSourcing)和 Saga 模式的分布式事务解决方案。以下是一个简单的账户转账案例:
@Model
public class BankAccount {
private final String id;
private int balance = 0;
private Collection<TransferEvent> eventsources = new ArrayList<>();
@OnCommand("transfer")
public void transfer(TransferCommand transferCommand) {
int balance2 = getBalance() + transferCommand.getValue();
if (balance2 > 1000 || balance2 < 0) {
aggregatePub.next(transferCommand.createCanceled());
}
TransferEvent transferEvent = transferCommand.creatTransferEvent();
eventsources.add(transferEvent);
aggregatePub.next(transferEvent);
}
@OnCommand("cancel")
public void cancel(Cancel cancel) {
int balance2 = getBalance() - cancel.getTransferCommand().getValue();
if (balance2 > 1000 || balance2 < 0) {
System.err.println("can not be canceled " + cancel.getTransferCommand().getTransactionId());
}
eventsources.add(cancel.getTransferCommand().createCanceled());
}
private int project() {
return eventsources.stream().map(e -> e.getValue()).reduce(this.balance, (a, b) -> a + b);
}
public int getBalance() {
return project();
}
}
3.2 最佳实践
- 领域驱动设计:使用 JdonFramework 时,应遵循 DDD 的原则,将业务逻辑集中在领域模型中。
- 事件驱动架构:通过事件驱动的方式实现模块间的解耦,提高系统的可扩展性和可维护性。
- 分布式事务:利用 Saga 模式和事件溯源实现分布式事务,确保数据的一致性。
4. 典型生态项目
4.1 JiveJdon
JiveJdon 是一个基于 JdonFramework 实现的复杂 DDD 应用案例,是一个讨论论坛/博客/CMS 平台。它展示了如何使用 JdonFramework 构建一个高并发、高可扩展的 Web 应用。
4.2 LMAX 架构
JdonFramework 借鉴了 LMAX 架构的设计思想,实现了高性能的并发处理能力。LMAX 架构通过事件驱动的模式,实现了每秒处理数百万订单的高吞吐量。
4.3 Apache Kafka
虽然 JdonFramework 本身不依赖于 Apache Kafka,但它可以与 Kafka 结合使用,实现更高级别的消息传递和分布式事务处理。
通过以上内容,您可以快速了解并上手使用 JdonFramework,构建基于领域驱动设计的 Java 应用系统。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0150- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0111
项目优选
收起
暂无描述
Dockerfile
731
4.73 K
Ascend Extension for PyTorch
Python
609
786
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1 K
1.01 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
392
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
145
237
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.15 K
148
暂无简介
Dart
983
251
Oohos_react_native
React Native鸿蒙化仓库
C++
348
401
昇腾LLM分布式训练框架
Python
166
197
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.67 K
986