RabbitMQ代替WebHooks

RabbitMQ代替WebHooks,rabbitmq,webhooks,Rabbitmq,Webhooks,我们有一个项目,为我们批准的许多客户提供API(我们与他们签署纸质合同)。我们的客户希望从我们那里获得有关其资源的更新(所有客户都是独立的)。目前,我们考虑WebHookes和RabBMQ来流事件。RabbitMQ听起来很奇怪,因为它将被外部客户机使用(是的,我们批准它们,但我们不控制它们)。如果我们使用Webhook,我们需要重新实现许多从RabbitMQ免费获得的特性 我们在Webhook中需要实现的功能: 身份验证和订阅(一些客户端有一些独立的应用程序,因此他们需要一种方法告诉我们他们的

我们有一个项目,为我们批准的许多客户提供API(我们与他们签署纸质合同)。我们的客户希望从我们那里获得有关其资源的更新(所有客户都是独立的)。目前,我们考虑WebHookes和RabBMQ来流事件。RabbitMQ听起来很奇怪,因为它将被外部客户机使用(是的,我们批准它们,但我们不控制它们)。如果我们使用Webhook,我们需要重新实现许多从RabbitMQ免费获得的特性

我们在Webhook中需要实现的功能:

  • 身份验证和订阅(一些客户端有一些独立的应用程序,因此他们需要一种方法告诉我们他们的应用程序在哪里)
  • 签名请求(他们需要确保请求来自我们)
  • 重试机制(如果选择RabbitMQ,则不必处理)
  • 一种保证事件顺序的机制(考虑到重试机制更有趣。如果选择RabbitMQ,我们也不需要这种机制)
  • 这类话题,所以他们只得到他们需要的

您听说过使用RabbitMQ代替Webhook的经验吗?听起来太疯狂了吗?

如果您想通过direclty RabbitMQ发送事件,您将面临以下挑战:

  • 您必须将同一事件发送到不同的队列,以便您的客户端只接收自己的事件。E.x.:
    客户1.发票.已付
    客户2.发票.已付

  • 您必须在RabbitMq中为每个客户机创建一个帐户,这将给用户管理带来挑战

  • 安全。您的Rabbitmq服务端口将向公众开放

  • 为了避免这些挑战,您应该使用RabbitMq实现webhook调度服务。 它是如何工作的

  • 将您的事件从主应用程序发送到RabbitMQ
  • Webhook服务接收事件并相应地将其发送到URL 查看此URL了解如何设计webhook服务:

    为客户提供可靠的非兔子/非AMQP接口。在内部使用RabbitMQ,这样的消息队列设计才有意义(RabbitMQ在许多情况下很好,但在某些域中有更好的队列替代方案)。也就是说,RabbitMQ是一个与SQL Server类似的实现细节。。通常不允许客户机直接连接到他们的SQL实例:}是的,我有支持我上述“规则”的经验:即使是“内部,在一个组织内”,由于使用RabbitMQ而不是建立更好的边界,很容易会有太多的域/实现出血和缺乏定义和控制。允许外部客户端访问RabbitMQ只会加剧此问题,并使访问安全性更加困难(即,如何“打孔”网络、管理客户端访问/权限、提供审核?)(“Webhook”可能提供与客户端的接口并在内部利用RabbitMQ?耸耸肩)