为什么我们在使用 webhook 时需要一个队列?



谁能澄清使用队列的目的是什么?

我的理解是,webhook只是一个URL,你对该URL执行POST请求,然后根据请求的正文/数据执行一些操作。那么为什么我需要将数据排队并将其存储在database然后再次遍历数据库并执行这些东西。

简短的回答是,您不必使用队列。Webhook 只是一个 HTTP 请求(通常是 POST(,用于通知应用程序某种类型的事件。您可能需要考虑队列的原因是因为您可能会遇到的典型问题。

其中之一是因为返回 webhook 请求程序(源(的响应时间。许多源希望尽快得到响应(HTTP 状态 200(,以便他们可以将请求从其 webhook 系统中取消排队。如果处理 webhook 需要一些时间,源通常会建议您使用队列来推迟与 200 响应异步的较长进程。

另一个可能的原因可能是删除重复的请求。Webhook 无法保证每个事件只会收到一个请求。队列可用于对这些请求进行重复数据消除。

如果可能的话,我建议您坚持使用简单的请求处理程序,然后在遇到问题时发展更复杂的处理程序。如果遇到上述问题,请考虑将队列作为一种潜在的设计方法。

如果 webhook 多次调用非常接近,则需要某种方法来防止冲突。

不过,它不一定是队列。如果 webhook 执行数据库查询和更新,则可以使用事务来确保每次调用都是原子的。

在这方面,它与任何其他Web实用程序几乎没有什么不同。您应该在处理 Web 表单的脚本中执行类似操作。

通常,webhook 用于 Rabbitmq 和 Kafka 等消息队列。当您的应用程序严重依赖 webhook 进行关键操作(如同步实时数据等(时,会使用它,在消息队列的帮助下,您可以确定何时服务器关闭或系统无法处理高流量队列可以代表您处理 webhook,并确保没有 webhook 数据丢失。因此,如果您的应用程序不需要 webhook 来处理关键的事情,您可以使用 URL 方法,否则您应该使用 Queue。

最新更新