【问题标题】:Why do we need a queue when using webhooks?为什么我们在使用 webhook 时需要队列?
【发布时间】:2018-09-03 23:14:21
【问题描述】:

谁能阐明使用队列的目的是什么?

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

【问题讨论】:

    标签: http networking webhooks


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 准确的答案,但我会添加另一个注意事项。通常,在接收端,您无法控制接收 webhook 的速率。在许多情况下,这可能会导致容量意外增加导致性能下降和中断的问题。您自己的 webhook 处理方法可能会受到下游服务的限制,例如您作为 webhook 处理程序的一部分调用的具有速率限制的 3rd 方 API。现在,是时候换个插件了:虽然您理想情况下想要改变处理方式,但设置起来并不复杂。我们已经建立了 hookdeck.com 来为您处理这一切。
    【解决方案2】:

    如果 webhook 被非常靠近地多次调用,您需要一些方法来防止冲突。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2015-07-16
      • 2019-06-09
      • 2011-07-05
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      相关资源
      最近更新 更多