zib*_*ibi 15 java jpa apache-kafka spring-boot
我目前正在使用JPA和Kafka的项目.我正在尝试找到一组合并这些操作的良好实践.
在现有代码中,生产者在与jpa相同的事务中使用,但是,根据我的阅读,似乎他们不共享事务.
@PostMapping
@Transactional
public XDto createX(@RequestBody XRequest request) {
Xdto dto = xService.create(request);
kafkaProducer.putToQueue(dto, Type.CREATE);
return dto;
}
Run Code Online (Sandbox Code Playgroud)
其中kafka生产者的定义如下:
public class KafkaProducer {
@Autowired
private KafkaTemplate<String, Type> template;
public void putToQueue(Dto dto, Type eventType) {
template.send("event", new Event(dto, eventType));
}
}
Run Code Online (Sandbox Code Playgroud)
这是组合jpa和kafka的有效用例,是否正确定义了事务边界?
当事务失败时,这不会按预期工作.kafka互动不是交易的一部分.
您可能想要查看TransactionalEventListener您可能希望在AFTER_COMMIT事件上将消息写入kafka.即使这样,kafka发布也可能失败.
另一个选择是使用jpa写入db.让debezium从您的数据库中读取更新的数据并将其推送到kafka.该活动将采用不同的格式,但更丰富.
通过查看您的问题,我假设您正在尝试实现OLTP系统的CDC(更改数据捕获),即将所有更改记录到事务数据库中。有两种方法可以解决此问题。
如果您使用CDC,请尝试使用任何可用的解决方案。
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |