我们正在创建一个多租户应用程序。为了允许用户创建业务逻辑,我们希望使用逻辑应用程序。
因此,我想创建一个Web应用程序,它将公开DocumentDB更改源。 创建逻辑应用程序时,您可以选择不同的开箱即用连接器。我们怎样才能将我们的名单列入名单?有没有关于这方面的文件?
这个想法是让逻辑应用程序与每个文档插入一起运行。 为实现这一目标,我有两个选择:轮询触发器和Webhook触发器。 我更喜欢轮询触发器,因为这比实现逻辑来处理每个租户的所有订阅URL更少。任何对此方法有疑虑/建议的人?
位置标题应该成为DocumentDB更改Feed中的延续标记,这是正确的吗?
逻辑应用程序将在没有位置标题的情况下第一次调用我的api
我的api将调用DocDb而不使用延续令牌,这将逐个返回所有文档,因为最大doc数设置为1
我的api将返回检索到的第一个文档,并将retry-after设置为0,并将该位置设置为我收到的新延续令牌。如果没有找到文件,api将返回结果,如步骤5中所示。
逻辑应用程序将启动一个新实例来处理文档,并将使用标题中的延续令牌再次调用API。
将重复步骤3到4,直到处理完所有文件。因为我每个逻辑应用程序实例只处理一个文档,所以Azure应该能够自动为我扩展吗?
处理完所有文件后,api将返回202状态代码,其中位置标头设置为最新的延续令牌,重试次数为15。
15秒后,逻辑应用程序将使用最新的延续令牌调用我们的api。这将再次触发该过程。
我的解决方案可行吗?如果由于某种原因我需要停止或克隆逻辑应用程序配置怎么办?如何知道最新的延续是什么,或者我需要在某些数据存储中保存我的延续令牌?
答案 0 :(得分:2)
是的,你应该支持你在这里描述的内容。您可以在逻辑应用中使用自己的连接器,方法是单击搜索上方的下拉列表,然后选择使用API管理或应用服务中的API作为详细here和here。
假设您正在使用上面的202轮询模式,则可以在location
标头的“触发状态”中保留延续令牌。因此,例如标头可以是https://mydocdbconnector.azurewebsites.net/api/trigger?triggerstate={thisCouldBeTheContinuationToken}
- 在后续轮询中,最后一个延续令牌被发送回触发器并且可以在操作中使用。只要触发器在定义中保持不变(启用/禁用/等所有保留触发器状态),就会保留触发器状态。
我不清楚的唯一部分是您拥有的多租户要求。我假设您的意思是希望每个用户能够在他们自己的documentDb实例上触发 - 今天最好的支持模式是每个客户拥有一个逻辑应用程序 - 每个用户都拥有自己的triggerState和触发器。这也可以利用自定义连接器。这是像Microsoft Flow这样的服务使用的模式,它构建在Logic Apps之上。
如果有帮助,请告诉我。