gpt4 book ai didi

java - 将kafka与jpa一起使用时的良好做法

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:11 25 4
gpt4 key购买 nike

我目前在一个使用 JPA 和 Kafka 的项目中。我正试图找到一组组合这些操作的良好实践。

在现有的代码中,生产者与jpa在同一个事务中使用,但是,从我读到的内容来看,它们似乎不共享一个事务。

@PostMapping
@Transactional
public XDto createX(@RequestBody XRequest request) {
Xdto dto = xService.create(request);
kafkaProducer.putToQueue(dto, Type.CREATE);
return dto;
}

其中kafka生产者定义如下:

public class KafkaProducer {
@Autowired
private KafkaTemplate<String, Type> template;

public void putToQueue(Dto dto, Type eventType) {
template.send("event", new Event(dto, eventType));
}
}

这是结合 jpa 和 kafka 的有效用例吗,事务边界定义是否正确?

最佳答案

当交易失败时,这将无法按预期工作。 kafka交互不是事务的一部分。

您可能想看看 TransactionalEventListener您可能希望在 AFTER_COMMIT 事件中将消息写入 kafka。即使这样,kafka 发布也可能会失败。

另一种选择是像您一样使用 jpa 写入数据库。让debezium从数据库中读取更新的数据并将其推送到 kafka。该 Activity 将采用不同的形式,但内容要丰富得多。

关于java - 将kafka与jpa一起使用时的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052406/

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