【问题标题】:Streaming data consumed from third-party WebHooks to application using an event broker in Azure使用 Azure 中的事件代理将使用的数据从第三方 WebHook 流式传输到应用程序
【发布时间】:2019-07-14 17:13:49
【问题描述】:

我目前正在开展一个项目,我需要在我的应用程序中使用第三方 Webhook。问题是,这个第三方服务不允许我选择通过这个 Webhook 将哪些事件推送到我的应用程序,所以我必须对所有事件做出响应,即使它们大多无用,如果我需要扩展我的应用程序或将其划分为微服务,即使它们有不同的需求,我也会将相同的数据流式传输到所有服务。此外,如果我的应用程序服务器出现问题,我将面临数据丢失。

解决方案是使用事件代理,它会从 Webhook 收集所有事件,以 200 OK 状态码响应提供者,将事件推送到特定主题,该主题将被存储到所有相关订阅服务接收该数据。

我正在寻找 Azure 中的完全托管服务,到目前为止,我遇到了 Azure 事件网格、Azure 事件中心和 Azure 服务总线。

我想知道这种方案的可行性,以及我是否可以直接从 Webhook 流式传输到这些 Azure 服务之一。

【问题讨论】:

    标签: azure message-queue webhooks azureservicebus azure-eventgrid


    【解决方案1】:

    不,您不能直接流式传输到这些服务中。您需要设置一些东西来接受 webhook 并将其发送到其中一个侦听的服务。

    但是,我要做的是创建一个http triggered azure function。您应该能够配置 webhook 以发布到函数。

    一旦您完成了函数设置,您就可以在那里创建一些逻辑,以根据其内容将消息路由到正确的通道。现在这可能是您的应用程序,服务总线队列、Azure 存储队列或事件网格。我不会推荐事件中心,因为它不太适合这个特定目的。

    【讨论】:

      【解决方案2】:

      如果使用第三方事件而不保证其按顺序处理,并且 webhook 有效负载是一个数组,则 Azure 事件网格可以直接使用您的第三方 webhook。 p>

      下面的屏幕 sn-p 显示了这个例子:

      上述集成基于 Custom Topic EndpointCustomInputSchema。 自定义主题端点使用以下 HTTP 响应代码将响应发送回 Webhook:

      Success                                200 OK
      Event data has incorrect format        400 Bad Request
      Invalid access key                     401 Unauthorized
      Incorrect endpoint                     404 Not Found
      Array or event exceeds size limits     413 Payload Too Large
      

      AEG 模型以松散解耦的 Pub/Sub 方式分发事件,并根据其订阅向订阅者可靠地重试传递。 AEG 订阅代表了兴趣来源和消费者之间的逻辑连接。它是一组元数据,由消费者描述什么、在哪里以及如何。

      基本上有两种交付模式,例如:

      • Push-PushAck,其中事件被推送到订阅者处理程序进行业务处理,结果返回到 AEG,例如Web Hook(Azure 功能)和混合连接。

      • Push-PullAck,其中事件可靠地传递给订阅者,传递响应返回给 AEG。必须将事件从该交付目标中拉出以进行业务后处理,例如服务总线队列、存储队列和事件中心。

      更新:

      对于使用 CustomInputSchema 创建自定义主题端点,可以使用 REST API 以下是负载 PUT 请求的示例:

      {
         "location": "westus",
         "properties": {
         "inputSchema": "CustomEventSchema",
         "inputSchemaMapping": {
           "properties": {
             "id": {
               "sourceField": null
             },
             "topic": {
               "sourceField": null
             },
             "eventTime": {
               "sourceField": null
             },
             "eventType": {
               "sourceField": null,
               "defaultValue": "notification"
             },
             "subject": {
               "sourceField": null,
               "defaultValue": "/webhook/events"
             },
             "dataVersion": {
               "sourceField": null,
               "defaultValue": "1.0"
             }
           },
           "inputSchemaMappingType": "Json"
         }
       }
      

      }

      上面的 CustomInputSchema 允许为此自定义主题端点使用任何输入事件模式。这是 AEG 的一个非常好的功能。 “坏消息”是事件必须在数组中也包含单个事件。我希望,当单个事件也可以作为 JObject(不在数组内部)发布时,AEG 团队将改进自定义和域主题。

      对于通过 AEG 事件模型绕过输入事件模式,订阅者(源事件兴趣的消费者)必须声明一个 DeliverySchema = CustomInputSchema。默认输出事件架构是 EventGridSchema

      以下示例显示了使用上述 CustomInputSchema 发布到自定义主题并使用 CustomInptutSchema 传递给订阅者的事件消息,另一个使用 EventGridSchema .

      向自定义主题端点触发事件(事件数组):

      [
        {
          "abcd": 12345
        }
      ]
      

      订阅者 DeliverySchema = CustomInputSchema

      {
        "abcd": 12345
      }
      

      订阅者 DeliverySchema = EventGridSchema(默认架构):

      {
        "id": "f92a5dbf-d206-4e61-ac1e-7498c543039a",
        "eventTime": "2019-07-14T07:19:00.3969337Z",
        "eventType": "notification",
        "dataVersion": "1.0",
        "metadataVersion": "1",
        "topic": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rk2012/providers/Microsoft.EventGrid/topics/testerTopic8",
        "subject": "/webhook/events",
        "data": 
          {
            "abcd": 12345
          }
      }
      

      请注意,每个订阅者的事件可以是filtered(已选择),基于松散解耦的 Pub/Sub 方式的订阅属性。换句话说,订阅者可以随时通过声明特定源兴趣的订阅来订阅 AEG 事件模型,例如主题、主题、事件数据等、投递机制、重试、死信等。

      【讨论】:

        猜你喜欢
        • 2021-10-04
        • 2013-09-16
        • 2011-04-06
        • 2019-11-28
        • 1970-01-01
        • 1970-01-01
        • 2019-12-07
        • 2011-04-09
        • 1970-01-01
        相关资源
        最近更新 更多