如何检查是否已调用 DELETE API
How to check if the DELETE API has been called
我的任务是实施类似于 Amazon SQS 的分布式排队系统。
如果有GET Request,我就得从主队列投递消息给用户,然后把消息放到不可见队列中。一个 DELETE 请求应该立即到来,我应该从不可见队列中删除消息。
如果没有 DELETE 请求,我应该增加重新传递计数并将消息发送回主队列。这将一直持续到重新投递计数变为 5,之后我将永久删除该消息。
现在我的疑问是,我怎么知道没有 DELETE 请求,这意味着我应该将消息发送回主队列?
我的程序适用于 DELETE 请求跟在 GET 请求之后的情况。我正在使用 java 来实现此实现。
首先,在设计层面,get和delete应该是一次完成的。请注意 in the JDK,Queue
的 pull()
操作将执行获取和删除操作。如果你坚持单独的操作,至少你应该支持一个可选的获取和删除请求类型。
现在,当您想检测一个 没有 发生的动作时会出现问题,因为它可以永远 "maybe happen in the future"。因此,您需要设置一个 window 的时间,在此之后您确定预期的操作没有发生。
通常做的是在将请求放入不可见队列之前将 "received" 时间戳附加到请求(并重新传送计数)(更好的名称是 "pending delete requests" 队列) 您可以将请求包装在添加属性的自定义 java class 中。
实际上,我认为队列不是集合的好选择。当删除请求确实到来时,您需要随机访问该请求。所以也许哈希映射是更好的选择。
您将需要实现一个 Timer 每 x 秒调用一次任务。任务将扫描 pendingDeleteRequests
地图以查找在允许的 window 时间内未收到删除的请求,并从地图中删除。
最后说明:一些消息传递系统具有 "dead letter" 功能,这是发送失败通知的目的地。这将有助于调试问题。
我的任务是实施类似于 Amazon SQS 的分布式排队系统。
如果有GET Request,我就得从主队列投递消息给用户,然后把消息放到不可见队列中。一个 DELETE 请求应该立即到来,我应该从不可见队列中删除消息。
如果没有 DELETE 请求,我应该增加重新传递计数并将消息发送回主队列。这将一直持续到重新投递计数变为 5,之后我将永久删除该消息。
现在我的疑问是,我怎么知道没有 DELETE 请求,这意味着我应该将消息发送回主队列?
我的程序适用于 DELETE 请求跟在 GET 请求之后的情况。我正在使用 java 来实现此实现。
首先,在设计层面,get和delete应该是一次完成的。请注意 in the JDK,Queue
的 pull()
操作将执行获取和删除操作。如果你坚持单独的操作,至少你应该支持一个可选的获取和删除请求类型。
现在,当您想检测一个 没有 发生的动作时会出现问题,因为它可以永远 "maybe happen in the future"。因此,您需要设置一个 window 的时间,在此之后您确定预期的操作没有发生。
通常做的是在将请求放入不可见队列之前将 "received" 时间戳附加到请求(并重新传送计数)(更好的名称是 "pending delete requests" 队列) 您可以将请求包装在添加属性的自定义 java class 中。
实际上,我认为队列不是集合的好选择。当删除请求确实到来时,您需要随机访问该请求。所以也许哈希映射是更好的选择。
您将需要实现一个 Timer 每 x 秒调用一次任务。任务将扫描 pendingDeleteRequests
地图以查找在允许的 window 时间内未收到删除的请求,并从地图中删除。
最后说明:一些消息传递系统具有 "dead letter" 功能,这是发送失败通知的目的地。这将有助于调试问题。