Rest 如何设计数据库幂等微服务(POST)

Rest 如何设计数据库幂等微服务(POST),rest,http-post,microservices,Rest,Http Post,Microservices,这是一个关于如何设计后期数据库服务的非常一般和基本的问题(对于实现微服务来说是新的)。假设您有一个SaveCustomer微服务。您可以使用POST传递客户数据,SaveCustomer服务接收数据(JSON)并将其插入数据库 由于网络拥塞等原因,客户端可能会重试并发送重复的请求,那么如何确保不在数据库中插入重复的记录呢 谢谢 Obaid虽然POST不是幂等的,但可以通过为每个命令分配一个唯一的ID(例如GUID)来实现这一点。然后,在微服务上,在执行命令之前,检查命令是否尚未处理。如果是,则忽

这是一个关于如何设计后期数据库服务的非常一般和基本的问题(对于实现微服务来说是新的)。假设您有一个SaveCustomer微服务。您可以使用POST传递客户数据,SaveCustomer服务接收数据(JSON)并将其插入数据库

由于网络拥塞等原因,客户端可能会重试并发送重复的请求,那么如何确保不在数据库中插入重复的记录呢

谢谢
Obaid

虽然POST不是幂等的,但可以通过为每个命令分配一个唯一的ID(例如GUID)来实现这一点。然后,在微服务上,在执行命令之前,检查命令是否尚未处理。如果是,则忽略它,否则将其发送到执行实际更新的实际组件,并将命令标记为已执行


此解决方案非常优雅,因为它可以作为附加组件来实现,该组件可以在and之后装饰核心逻辑。此外,您可以使用来使用或不使用此idem效力保护。

POST
不应该是正常的,那么我应该如何实现将记录插入数据库的服务呢?任何建议,因为我对MicroService是新手感谢您的回复,是否有任何资源/示例/教程可以说明人们通常如何实现此类服务(rest服务插入db记录)、如何实现此类服务以及如何从另一个服务调用此服务(意味着处理重试等).我的场景:我有一个微服务,它必须在处理后插入一条记录,但是我不希望用户/客户端在调用此服务时遇到任何延迟(如果数据库被淹没,有时可能会出现这种情况)。因此,我考虑使插入异步化,即将insert语句发送到队列(Kafka),并通过客户机处理它们。这是一个好的解决方案吗?有没有其他解决方案可以让我不丢失数据,也不必因为数据库性能问题而降低用户体验?@obaid使用命令队列是一种解决方案。其他解决方案可以是使用事件驱动的体系结构。因此,您的客户端服务应该发布一个事件。然后,Saga/流程管理器应该(通过订阅或轮询)拾取该事件,并向下一个微服务发出命令,如果出现问题,则重试。这种架构更好,但也意味着更大的重构,因为您的微服务应该按域/子域划分。您应该看看DDD方法(领域驱动设计),该方法通过有界上下文分割整体。