首页 > 解决方案 > 如何在 Spring Boot 应用程序中处理传入的 webhook

问题描述

我正在与通过 webhook 发送集成状态的供应商集成。在某些情况下,它们会发送多个相同类型和唯一 ID 的状态。

我有每个 webhook 状态的数据库队列。在持久化每个 webhook 状态之前,我会检查是否已经记录了该 webhook 的相同类型和唯一 id。如果没有,那么我记录它,否则我只是忽略它。

问题是,当两个相同的 webhook 状态背靠背时,我的编码进程同时在不同的线程中并将这两种状态都保存在数据库中,因为if (exists)检查返回 false,因为两者都还没有将它们的相应状态保存到数据库中。

我已经包装了我的handleWebook方法, @Transactional(propagation = Propagation.REQUIRES_NEW)但显然这无济于事,因为两个 webhook 都是在它们自己的事务中的不同线程中处理的。

我现在正在考虑将所有 webhook 添加到BlockingQueuehandleWebhook然后从中获取并按顺序处理每个 webhook。但我不知道如何在 Spring Boot 中干净地做到这一点。我也不确定这是否真的是我的问题的解决方案。也许我对它的理解@Transactional不够稳健,并且有一个 Spring 设置可以添加到我的注释中,以解决我面临的问题。

非常感谢任何建议和建议。

标签: spring-boottransactionsqueuewebhooksblockingqueue

解决方案


这就是你如何在春天实现这个目标。

@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED)
public boolean isIdExists(){
Your business logic will be here 
}

推荐阅读