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

Spring Kafka中的事务同步

闾丘诚
2023-03-14

我想要将kafka事务与存储库事务同步:

@Transactional
public void syncTransaction(){
  myRepository.save(someObject)
  kafkaTemplate.send(someEvent)
}

如果我能获得一个简单的kafka事务与存储库事务同步的示例和一个解释,我会真正帮助我。

共有1个答案

易流觞
2023-03-14

如果为侦听器容器提供了KafkatransactionManager,则容器将创建一个生产者,任何下游kafka模板都将使用该生产者,并且容器将为您将偏移量发送到事务。

如果容器有其他事务管理器,则容器不能发送偏移量,因为它没有对生产者(或模板)的访问权。

另一个解决方案是使用@transactional(使用datasource TM)注释您的方法,并使用kafka TM配置容器。

这样,您的DB tx将在线程返回到容器之前提交,然后容器将把偏移量发送给kafka事务并提交它。

有关示例,请参见框架测试用例。

 类似资料:
  • 目前,我的java应用程序在多个服务器中运行。我有一个数据事务遇到死锁。我尝试使用线程和同步,但徒劳无功,因为多个服务器中有多个应用程序实例。每个应用程序实例都同步了其数据事务,但同一数据库上的不同同步应用程序事务恰好使数据库陷入死锁状态,因为对于所有应用程序实例,数据库是相同的,并且是一个。 在这种情况下,请提出正确的方法。任何高级解决方案也就足够了。

  • 我试图用不同的事务管理器嵌套事务,其中如果嵌套的事务失败,外部主事务也需要回滚 我的spring配置文件有 但是,当失败时,中的事务不会回滚。如何使回滚工作?

  • 我将Spring和Spring Kafka用于一个批处理服务,该服务从Kafka收集数据,直到满足某些条件,然后转储数据。 我想在数据离开我的服务时确认提交,但它可能会在内存中停留5-10分钟。 是否有任何其他方法来确认/提交来自Spring Kafka的偏移量,只给出分区/偏移量信息?

  • 10.4. 使用资源同步的事务 现在应该比较清楚的是:不同的事务管理器是如何创建的,以及它们如何被连接到相应的需要被同步到事务的资源上(例如,DataSourceTransactionManager对应到JDBC DataSource, HibernateTransactionManager对应到Hibernate的SessionFactory等)。可是,剩下的问题是,直接或间接地使用一种持久化A

  • 问题内容: 我正在使用同时使用JMS和Hibernate的独立应用程序。 该文档建议,如果我想同时使用这两种资源进行事务处理,则必须使用JTA。 但是,现在使用带有@Transaction注释的DAO方法(和HibernateTransactionManager),这似乎已经可以工作。当我在JmsTemplate上调用send()时,消息不会立即发送,而是随着方法的返回,使用Hibernate会话

  • 我正在与用propagation.requires_new注释的方法的奇怪行为作斗争。 以下是TransactionManager的日志: