2016-12-21 49 views
2

我们正在创建一个多租户应用程序。为了让用户创建业务逻辑,我们希望使用Logic应用程序。自定义逻辑应用程序连接器

因此,我想创建一个Web应用程序,它将公开DocumentDB变更源。 创建逻辑应用程序时,您可以选择不同的外接盒连接器。我们如何才能将我们的列入清单?有没有关于这方面的任何文件?

想法是让逻辑应用程序与每个文档插入一起运行。 为了实现这一点,我有两个选择:轮询触发器和Webhook触发器。 我更喜欢轮询触发器,因为这比执行逻辑来处理每个租户的所有订阅的URL的工作量要少。任何对此方法有疑虑/建议的人?

位置标题应该成为DocumentDB更改提要的继续标记,是正确的吗?

  1. 逻辑应用程序将调用我的API第一次没有位置标头

  2. 我的API将调用DocDb没有延续令牌,这将返回所有文档一个接一个,因为最大文档计数设为1

  3. 我的api将返回检索到的第一个文档,并将retry-after设置为0,并将位置设置为我收到的新续标记。如果找不到文档,api将返回步骤5中的结果。

  4. 逻辑应用程序将启动一个新实例来处理文档,并将使用标题中的continuation标记再次调用API。

将重复步骤3到4,直到处理完所有文档。因为我每个逻辑应用程序实例只处理一个文档,所以Azure应该能够自动为我缩放?

  • 当所有文档进行处理,该API将返回202的StatusCode与位置报头中设置到最新的延续令牌和-后重试到15

  • 15秒后,逻辑应用程序将使用最新的延续令牌调用我们的api。这将再次触发该过程。

  • 我的解决方案是否可行?如果我需要停止或克隆逻辑应用程序配置出于某种原因,如何知道最新的延续是什么或者我需要在一些数据存储中保存我的延续标记?

    回答

    2

    是的,你在这里描述的应该被支持。您可以在逻辑应用程序中使用自己的连接器,方法是单击搜索上方的下拉菜单,然后选择使用API​​管理或应用程序服务中的API,详细说明如下:herehere

    假设您使用上面的202轮询模式,则可以在location标题的“触发器状态”中保留延续标记。因此,例如,标题可能是https://mydocdbconnector.azurewebsites.net/api/trigger?triggerstate={thisCouldBeTheContinuationToken} - 在随后的轮询中,最后一个连续令牌被发送回触发器并可用于操作。只要触发器在定义中保持不变(启用/禁用/等全部保留触发器状态),触发器状态就会被保留。

    我不清楚的唯一部分是您的多租户要求。我假设你的意思是你希望每个用户能够在他们自己的documentDb实例上触发 - 目前支持的最好模式是为每个客户提供一个逻辑应用程序 - 每个用户都有自己的triggerState和trigger。这也可以利用自定义连接器。这是使用基于Logic Apps构建的Microsoft Flow服务的模式。

    让我知道是否有帮助。

    +0

    感谢您的回复。我已经设置了一个逻辑应用程序,并在我的api中实现了更改。但是,有些事情似乎出了问题。我已将最大项数设置为1.我认为每个文档都将通过逻辑应用程序。但是,只处理36个项目,并且doc db告诉我所有内容都已处理完毕(它应该处理超过10,000个项目)。你能解释一下这些属性是什么:StartFrombeginning和SessionToken? – Identity

    +0

    这是使用您自己的连接器还是Azure DocumentDB之一?由于这是我自己猜测的一个触发器 - 请确保您正在跨多个分区(并行或一个接一个)监听更改Feed SDK。我不是DocDB SDK方面的专家,但如果这是呃逆,我可以联系到该团队。 – jeffhollan

    +0

    我已将错误发送给DocDB团队。在几次请求之后,我突然得到78个结果,而不是1个头部定义的结果。 http://pasteboard.co/cS7YAErUT.png – Identity

    相关问题