我目前参与一个项目,其中使用了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相结合,这是一个有效的用例吗?事务边界是否定义正确?