【问题标题】:CosmosDBTrigger on Azure Function without Lease Collection没有租赁集合的 Azure 函数上的 CosmosDBTrigger
【发布时间】:2018-11-14 19:14:54
【问题描述】:

我有一个 Azure 函数,每次更新我的 CosmosDb 集合中的多个项目时都会触发该函数。

代码运行正常:

[StorageAccount("AzureWebJobsStorage")]
public static class ChangeFeedFunction
{
    [FunctionName("ChangeFeedFunction")]
    public static void ChangeFeedFunction(
        [CosmosDBTrigger(
            databaseName: "MyDataBase",
            collectionName: "MyCollection",
            ConnectionStringSetting = "CosmosDbConnectionString",
            LeaseCollectionName = "MyCollection_Leases",
            CreateLeaseCollectionIfNotExists = true
        )] IReadOnlyList<Document> documents,
        [Queue("collection-changes")] ICollector<Message> analystQueue,
        ILogger logger
    )
    {
        //Operations;
    }

但在这种情况下,这意味着我有 2 个 CosmosDb 集合(MyCollectionMyCollection_Leases),每月最低 40 美元。我想降低成本。有没有办法在不使用另一个 CosmosDb 集合的情况下观察我的 CosmosDb 集合的修改?

谢谢

【问题讨论】:

    标签: azure-functions azure-cosmosdb


    【解决方案1】:

    cosmos db trigger function document之后,lease集合至今无法避免,因为它肩负着重要的责任。

    在使用触发器存储每个函数的检查点时,我们需要一个lease 集合。假设有10个文档被插入到cosmos db中,触发器功能被一个一个触发,检查点随着进程移动并存储到lease集合中。突然,触发器关闭是由于某些原因。在此期间,又有 5 个文档插入 db。触发函数重启后,通过lease集合中的检查点,它知道从哪个节点继续执行函数。(我希望我已经说清楚了......)

    顺便说一句,您可以为您的所有收藏共享一个 lease 收藏,以获得更具成本效益的方法。请参考这个article

    至于成本,您可以创建最小配置的lease 集合。门户网站的成本是估计值。基于 RU 消耗的价格。请参考此document

    【讨论】:

    • 感谢您的回答!
    • @JayGong 这是否意味着 Lease 集合必须是同一个数据库的一部分?
    【解决方案2】:

    我建议扩展数据库而不是集合。如果您以 400 RU/s 的速度扩展数据库,则可以跨集合共享。

    【讨论】:

    • 感谢您的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2016-06-12
    • 2021-02-10
    • 1970-01-01
    • 2016-08-19
    • 2017-06-22
    相关资源
    最近更新 更多