这是关于如何设计POST数据库服务的一般性和基本问题(实现微服务的新功能)。假设你有一个SaveCustomer微服务。您是一个POST来传递客户数据,SaveCustomer服务接收数据(JSON)并将其插入数据库。
由于网络拥塞等原因,客户端可能会重试并发送重复请求,那么如何确保不在数据库中插入重复记录?
由于 奥贝德
答案 0 :(得分:2)
虽然POST不是幂等的,但您可以通过为每个命令分配唯一ID(例如GUID)来实现此功能。然后,在微服务上,在执行命令之前,检查命令是否已经处理完毕。如果是,则忽略它,否则将其发送到执行实际更新的实际组件并将命令标记为已执行。
此解决方案非常优雅,因为它可以作为一个额外的组件实现,可以<{>}}和Open/close principle 装饰核心逻辑。此外,您可以使用Single responsibility principle来使用或不使用此同等效力保护。