Webhook与发布者和订阅者的区别

6
我发现了一个名为“Webhook”和“Publisher/Subscriber”的概念。在Webhook中,第三方应用程序会在依赖应用程序发生更新时发送信息,第三方将向您的应用程序提供的URL发送HTTP POST请求。而在发布者/订阅者模式中,订阅者将注册主题,发布者则在该主题上写入内容,然后类似于第三方的注册机构将根据所订阅的主题向订阅者发送信息。
两者相似还是不同呢?
我感到困惑,有人能够解答吗?
2个回答

13
概念上,这两种方法都用于在事件发生时通知客户端。但实际上,我会在两个不同的场景中使用它们。Webhook(来自维基百科):Webhook 在 Web 开发中是一种通过自定义回调增强或改变 Web 页面或 Web 应用程序行为的方式。这些回调可能由第三方用户和开发人员维护、修改和管理,他们可能与原始网站或应用程序没有任何关联。该术语 “Webhook” 是由 Jeff Lindsay 于 2007 年从计算机编程术语 Hook 中创造的。
Webhook 方法适用于希望在第三方与后端服务器之间通信异步更改或更新的情况。这意味着第三方需要为每个客户端注册 webhook 地址,并触发带有需要通信信息的 HTTP 请求。使用 Webhook 的一些考虑因素包括在 Webhook 地址未响应或出现任何给定临时故障的情况下的失败处理、重试责任和处理由发布者完成。以下是使用 Webhook 方法的几个示例:-SendGrid.com - 一种电子邮件服务,允许您通过 API 发送电子邮件和广告电子邮件。如果您想要在后端公开 webhook,在用户从列表中取消订阅时得到通知。-Braintree.com - 让您为顾客购买的产品收费的计费网关-例如,您可以在后端公开 webhook,以便在成功执行每笔定期付款时通知您。
当涉及发布者/订阅者时,这更像是一种消息模式(来自维基百科):在软件架构中,发布-订阅是一种消息模式,发送方称为发布者,它们不会直接编程将消息发送给特定的接收者,称为订阅者,而是将发布的消息分类为不知道是否有任何订阅者的类别。同样,订阅者对一个或多个类别表示兴趣,并且只接收感兴趣的消息,而不知道是否有任何发布者。优点包括:松散耦合。发布者和订阅者之间松散耦合,甚至不需要知道对方的存在。以主题为重点,发布者和订阅者可以不了解系统拓扑结构。无论哪一个操作都可以继续正常进行而不影响另一个操作。在传统的严密耦合的客户端-服务器范例中,当服务进程未运行时,客户端无法向服务器发送消息,反之亦然。许多发布-订阅系统不仅可以解耦发布者和订阅者的位置,还可以将它们的时间分离。这样的发布/订阅系统中,中间件分析人员通常采用一种常见的策略:关闭发布者以允许订阅者通过积压来工作(这是一种带宽限制形式)。 可扩展性
相比传统的客户端-服务器模式,提供更好的可扩展性,通过并行操作、消息缓存、基于树或基于网络的路由等方式实现。然而,在某些类型的紧密耦合、高容量企业环境中,随着系统扩展成为共享发布/订阅基础设施的数千台服务器的数据中心,目前的供应商系统往往失去了这个优势;在这些情况下,发布/订阅产品在高负载下的可扩展性是一个研究难题。另一方面,在企业环境之外,发布/订阅范例已经证明了其可扩展性,远远超出单个数据中心的范围,通过 Web 同步协议(如 RSS 和 Atom)提供全网分布式消息传递。这些同步协议接受更高的延迟和缺乏交付保证,以换取即使是低端 Web 服务器也可以将消息传送到(可能)数百万个不同的订阅节点的能力。 缺点
发布/订阅系统最严重的问题是它们主要优势的副作用:发布者与订阅者之间的解耦。
有关发布/订阅的更多信息,请参阅以下帖子:

谢谢@liorsolomon,你的信息更有用。在订阅者方面有一个不同之处,它们可以是拉取或推送订阅,根据这一点它们会有所不同。 - Prakash

4

Webhook是一种通过HTTP实现PubSub的技术,使得Webhook技术成为PubSub的一个子集。除了Webhooks之外,PubSub还可以使用其他订阅和发布方式(例如电子邮件)。


虽然这看起来正确并且容易理解,但我想知道这个来源以确认并进一步阅读它的内容。 - Ganesh Jadhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接