推荐使用:事件驱动的Todo List微服务示例应用
本文将向您介绍一个基于Spring Boot、JPA、Apache Kafka和ElasticSearch的Todo List应用,它利用了Eventuate Tram框架的强大功能,实现了数据库事务与消息发布的原子性,确保现代微服务应用程序的可靠性和一致性。
项目简介
这个开源项目是一个名为"Todo List"的示例应用,它的目标是展示如何使用Eventuate Tram框架开发微服务。在传统的更新数据和发布消息的方式(如2PC/JTA)不再适应现代应用需求的情况下,Eventuate Tram提供了一种新的机制。通过在ACID事务中插入事件到数据库表,随后由CDC(变更数据捕获)进程异步推送到消息中间件,如Apache Kafka。
技术解析
该应用的核心在于Eventuate Tram框架,它支持:
- 数据库事务中的事件发布:当更新(例如创建或修改域模型聚合根)时,框架会把事件插入到
EVENTS
或MESSAGES
表。 - 事件驱动的CQRS视图:应用订阅并处理这些事件,以更新存储在ElasticSearch中的CQRS视图。
该应用采用的技术栈包括:
- Java
- JPA
- Eventuate Tram框架
- Spring Boot
- MySQL
- ElasticSearch
- Apache Kafka
应用场景
Todo List应用的架构可以用于以下情况:
- 业务流程同步:在多服务协作场景下,每个服务都可以通过发布事件来通知其他服务数据的改变。
- 实时查询:通过CQRS视图,可以提供实时的数据查询接口,无需访问原始数据库。
- 数据一致性保证:即使在分布式环境中,也能保证数据的一致性和最终一致性。
项目特点
- 事务性事件发布:事件的插入与数据库操作一起在同一个事务内完成,确保数据更新与消息发布的原子性。
- 灵活的扩展性:应用分为单独的服务模块,易于扩展和维护。
- 无侵入性设计:Eventuate Tram框架提供了无侵入的API,使得集成到现有Spring Boot应用中变得简单。
- CQRS与ES结合:利用ElasticSearch构建高效读取性能的查询视图,优化了查询效率。
要深入了解并体验这款应用,请尝试构建并运行项目,通过Swagger UI交互,亲身体验其强大功能。
./gradlew assemble
export DOCKER_HOST_IP=...
docker-compose -f docker-compose-eventuate-mysql.yml build
docker-compose -f docker-compose-eventuate-mysql.yml up -d
如果您有任何问题,欢迎加入邮件列表,或在Slack频道交流,也可以直接联系我们。
现在,让我们一起探索事件驱动微服务的世界,开启您的技术之旅吧!