quarkus - 从 Kafka 消费时 JPA 事务成功后的确认消息
问题描述
在 Quarkus 应用程序中,我想使用 Kafka 消息并使用实体管理器将其信息保存在数据库中。
这是我到目前为止得到的:
@ApplicationScoped
public class ClientEventConsumer {
@Inject ClientRepository repository;
private final BlockingQueue<Message<ClientEvent>> messages = new LinkedBlockingQueue<>();
void startup(@Observes StartupEvent startupEvent) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
executor.scheduleAtFixedRate(() -> {
if (messages.size() > 0) {
try {
Message<ClientEvent> message = messages.take();
ClientEvent clientEvent = message.getPayload();
ClientEntity clientEntity = new ClientEntity();
clientEntity.setId(clientEvent.getId());
clientEntity.setName(clientEvent.getName());
repository.merge(clientEntity);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}, 1000, 500, TimeUnit.MILLISECONDS);
}
@Incoming("qualificationCheck")
public CompletionStage<Void> consume(Message<ClientEvent> msg) {
messages.add(msg);
return msg.ack();
}
}
但是使用这种方法,消息会在记录实际保存在数据库中之前得到确认。如果 JPA 事务成功,有没有办法只确认消息?
解决方案
推荐阅读
- ffmpeg - 在FFMPEG中链接drawtext以覆盖
- ios - iOS 图像查看器或预览与使用集合视图(启用分页)的照片应用程序完全相同,行距最小
- android - 在我的服务许可中我错过了什么
- python - Python shell 在同一虚拟环境中同一台机器的不同位置上以不同的方式工作
- google-apps-script - 在同一个 Google 电子表格上确定活跃用户
- sql - 带有 WHERE 子句的 Hive 查询不起作用
- javascript - 微软翻译小工具英语到德语自动
- vue.js - 无法从异步函数结果中显示
- android - Google Mobile vision api:如何检测和跟踪超过 3 个 QR 码?
- python - 从元组中获取替代值