gpt4 book ai didi

spring-boot - 事务发件箱模式与微服务中的 ChainedKafkaTransactionManager

转载 作者:行者123 更新时间:2023-12-04 03:43:34 28 4
gpt4 key购买 nike

使用 Spring-Kafkas ChainedKafkaTransactionManager,我看不出在 Spring Boot 微服务上下文中实现事务发件箱模式有任何意义。

将消息生产者(即 KafkaTemplate 的 send 方法)和 DB 操作放在同一个事务 block 中,正好解决了发件箱模式应该解决的问题:如果在事务代码中引发任何异常,则既不会提交数据库操作,也不会在消费者端读取消息(配置为 read_committed)

这样我就不需要额外的表格或任何类型的 CDC 代码。总之,Spring Kafka 的事务同步方式对我来说似乎比任何事务发件箱模式的实现都更容易使用和实现。

我错过了什么吗?

public ChainedKafkaTransactionManager chainedTransactionManager(
JpaTransactionManager transactionManager,
KafkaTransactionManager kafkaTransactionManager) {
ChainedKafkaTransactionManager chainedKafkaTransactionManager =
new ChainedKafkaTransactionManager<>(transactionManager,
kafkaTransactionManager);

return chainedKafkaTransactionManager;
}

@Bean
@Primary
public JpaTransactionManager transactionManager(EntityManagerFactory
entityManagerFactory) {
JpaTransactionManager jpaTransactionManager =
new JpaTransactionManager(entityManagerFactory);

return jpaTransactionManager;
}

@Bean
public KafkaTransactionManager<Object, Object>
kafkaTransactionManager(ProducerFactory producerFactory) {
KafkaTransactionManager kafkaTransactionManager =
new KafkaTransactionManager<>(producerFactory);

return kafkaTransactionManager;
}


@Transactional(value = "chainedTransactionManager")
public Customer createCustomer(Customer customer) {
customer = customerRepository.save(customer);
kafkaTemplate.send("customer-created-topic","Customer created");

return customer;
}

最佳答案

我认为它不会为您提供相同级别的安全性。如果 Kafka 提交和 DB 提交之间出现问题怎么办。

https://medium.com/dev-genius/transactional-integration-kafka-with-database-7eb5fc270bdc

关于spring-boot - 事务发件箱模式与微服务中的 ChainedKafkaTransactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65540273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com