我有一个端点,可以从我们的付款服务处收到确认。
但是,这种支付服务会ping两次,所以 - 鉴于我们是如何实施的 - 我们最终会得到两个订单确认。
我不打算讨论我们如何设计这个部分(它会得到改进) - 我想了解如何设置,以确保一个动作可以锁定任何并发的其他人,直到它完成。 / p>
或者至少要了解处理此类问题的出发点。
重复来自此操作:
def export
return head(:ok) if @order.reload.state == 'complete'
post_data(data)
@order.update(state: :complete)
head(:ok)
end
private
def post_data(data)
Curl.post("#{SHOP_URL}/orders.json", data.to_json) do |http|
http.headers['Content-Type'] = 'application/json'
http.headers['Accept'] = '*/*'
end
end
如果导出被调用两次,订单没有刷新,我最终会得到两个确认,我想避免。