如何在 Spring 引导应用程序中处理传入的 webhook
How to process incoming webhooks in a Spring Boot Application
我正在与一家供应商进行集成,该供应商通过 webhook 发送集成状态。在某些情况下,他们会发送多个相同类型和唯一 ID 的状态。
我有每个 webhook 状态的数据库队列。在持久化每个 webhook 状态之前,我检查是否已经记录了该 webhook 的相同类型和唯一 ID。如果没有,那我记录下来,否则我就直接忽略。
问题是,当两个相同的 webhooks 状态背靠背时,我的编码处理同时在不同的线程中进行,并将两种状态都保存在数据库中,因为 if (exists)
检查 returns false因为两者都还没有将相应的状态保存到数据库中。
我已经用 @Transactional(propagation = Propagation.REQUIRES_NEW)
包装了我的 handleWebook
方法,但显然这无济于事,因为两个 webhooks 都在各自事务中的不同线程中处理。
我现在正在考虑将所有 webhook 添加到 BlockingQueue
,然后我的 handleWebhook
从中获取并按顺序处理每个 webhook。但我不知道如何在 Spring Boot.我也不确定这是否真的能解决我的问题。也许我对 @Transactional
的理解不够稳健,并且有一个 Spring 设置可以添加到我的注释中来解决我面临的问题。
非常感谢任何意见和建议。
这就是您在 spring 中实现这一目标的方法。
@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED)
public boolean isIdExists(){
Your business logic will be here
}
我正在与一家供应商进行集成,该供应商通过 webhook 发送集成状态。在某些情况下,他们会发送多个相同类型和唯一 ID 的状态。
我有每个 webhook 状态的数据库队列。在持久化每个 webhook 状态之前,我检查是否已经记录了该 webhook 的相同类型和唯一 ID。如果没有,那我记录下来,否则我就直接忽略。
问题是,当两个相同的 webhooks 状态背靠背时,我的编码处理同时在不同的线程中进行,并将两种状态都保存在数据库中,因为 if (exists)
检查 returns false因为两者都还没有将相应的状态保存到数据库中。
我已经用 @Transactional(propagation = Propagation.REQUIRES_NEW)
包装了我的 handleWebook
方法,但显然这无济于事,因为两个 webhooks 都在各自事务中的不同线程中处理。
我现在正在考虑将所有 webhook 添加到 BlockingQueue
,然后我的 handleWebhook
从中获取并按顺序处理每个 webhook。但我不知道如何在 Spring Boot.我也不确定这是否真的能解决我的问题。也许我对 @Transactional
的理解不够稳健,并且有一个 Spring 设置可以添加到我的注释中来解决我面临的问题。
非常感谢任何意见和建议。
这就是您在 spring 中实现这一目标的方法。
@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED)
public boolean isIdExists(){
Your business logic will be here
}