java - 用于重构事件的可扩展架构

标签 java architecture jvm replay

我的任务是为数据转换管道开发架构。 从本质上讲,数据从一端进入,然后通过各种内部系统进行路由,以获取不同的形式,然后到达目的地。

The main objectives are -

  • Fault Tolerant. The message should be recoverable if one of the intermediate systems were down.
  • Replay/ Resequence - The message can be replayed from any stage and it should be possible to recreate the events in an idempotent manner.

我有几个自定义解决方案要解决

  • 实现检查点系统,其中可以在每个检查点的入口点和导出点记录消息,以便我们知道故障发生的位置。
  • 实现一种恢复机制,可以转到记录的存储(数据库、日志文件等)并以编程方式重建事件。

但是,我觉得这是一个相当标准的问题,具有明确的解决方案。

因此,我欢迎任何关于合适架构的想法,任何工具/包/模式的引用等等。

谢谢

最佳答案

Akka是显而易见的选择。当然 Scala 版本更强大,但即使使用 Java 绑定(bind)你也可以实现很多。

我觉得你可以关注CQRS方法和使用Akka Persistence模块。在这种情况下,很容易重播任何事件序列,因为您始终有一个持久的日志。

通常,Actor 模型使用 supervision 为您提供容错能力.

Akka Clustering将为您提供所需的可扩展性。

将 Akka 集群与 Akka Persistence 和 Cassandra 一起使用的非常棒的示例 - https://github.com/boldradius/akka-dddd-template (不幸的是只有 Scala)。

关于java - 用于重构事件的可扩展架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29550925/

相关文章:

architecture - RabbitMQ中需要单独的死信交换吗?

java - JVM 如何处理引用变量?

java - JConsole 在 Linux 中的位置

tomcat - JVM突然崩溃的原因

java - 使用接缝:mail in Message Driven Bean

java - Java Servlet API session 处理中的自定义 ID

java - 有没有一种方法可以更优雅地将数组排序为偶数和奇数?

java - IBM Message Broker Java API : java. lang.NoClassDefFoundError : com. ibm.mq.MQException

Python - 检查系统是 32 位还是 64 位以确定是否运行函数?

c# - 在哪里放置两个相关对象的业务逻辑?