当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中使用Kafka和Postgres的SAGA和本地事务

隆飞宇
2023-03-14

已经有一段时间没有使用SAGAs和spring-kafka(和spring-cloud-stream-kafka-binder)了。

上下文:有几个(3+)spring-boot微服务必须跨越业务事务,以便最终保持数据的一致状态。它们使用每个服务的数据库方法(每个服务将数据存储在Postgres中),并通过Kafka作为事件存储进行协作。

我将应用SAGA(无论是编排还是编排方法,让我们坚持第一种方法)来管理多个服务上的事务。

提前致谢

共有1个答案

缪远航
2023-03-14

Kafka不支持JTA/XA。你能做的最好的是“尽最大努力1pc”--见戴夫·赛尔的Javaworld文章;你必须处理可能的重复。

Spring for Apache Kafka提供ChainedKafKatransActionManager;对于消费者发起的事务,应该将CKTM注入到侦听器容器中。

CKTM应该首先拥有KTM,然后是RDBMS,因此RDBMS事务将首先提交;如果失败,Kafka tx将回滚并重新传递记录。如果DB成功但Kafka失败,则将重新传递记录(使用默认配置)。

 类似资料:
  • 我想把@AutoWired注释变成一个“方面”。我想在我的方面中注入一个存储库,但是当我试图调用autowired类的方法时,出现了NullPointException。 我已经尝试在aspect类上添加,但我出现了同样的错误。 如果我不使用aspect类,而是使用,我可以毫无问题地调用存储库。 一些文档谈到了spring的xml文件配置,但在spring boot,我没有这些文件。 这里是pom

  • 问题内容: 我正在使用 NodeJS / Postgres 构建一个简单的Web应用程序,需要在数据库中进行3次插入。 为了控制语句链,我使用 pg-transaction 。 我的问题是我必须总是先运行第2个插件,但是我有条件要运行第3个插件。 也许可以以更好的方式构建我的代码(欢迎提出建议)。 这是一个伪代码: 在每个查询之后, 如果 重复三遍 if(err){} 看起来很丑。 尝试检查一些选

  • 问题内容: 我的应用程序中有一个UIWebView,我想使用它来显示将链接到另一个URL的图像。 我在用着 问题是,即使图像已作为资源添加到我的项目中并复制到捆绑包中,也无法加载(即找不到)。 我尝试使用NSBundle来获取图像的完整路径并使用它,但它仍然不会显示在Web视图中。 有任何想法吗? 问题答案: 使用相对路径或文件:引用图像的路径不适用于UIWebView。相反,您必须使用正确的ba

  • 我们有一个Spring Boot应用程序,它使用来自IBM MQ的消息进行一些转换,并将结果发布到Kafka主题。我们使用https://spring.io/projects/spring-kafka为了这个。我知道Kafka不支持XA;然而,在文档中,我找到了一些关于使用ChainedKafkaTransactionManager链接多个事务管理器并同步事务的输入。同一文档还提供了一个示例,说明

  • 我一直在研究一个从oracle数据库生成xml的查询 其中“column”是一种类型 列列表的类型为 和 问题是,这必须转换成postgres,因为CAST和MULTISET在postgres中是不可用的,所以有没有办法在postgres语法中实现这一点

  • Elasticsearch是一款开源的数据搜索引擎和数据分析引擎,不同于WordPress的搜索,它是noSQL搜索引擎,没有数据库数据表,而是将数据以JSON格式存储在文件里,搜索效率远高于WordPress基于SQL的搜索方式,特别适合大型WooCommerce电商网站,或者做搜索推荐关键词的功能。想了解它,最好的方法是本地安装一个,自己动手试一试。 安装Elasticsearch 下载Ela