Stored procedures 由队列并发触发的Azure函数

Stored procedures 由队列并发触发的Azure函数,stored-procedures,concurrency,azure-functions,message-queue,Stored Procedures,Concurrency,Azure Functions,Message Queue,我有一个azure函数,它从azure数据库调用存储过程。它的工作方式是,当它收到消息“a”时,它应该使用BULK INSERT.csv文件将文件“a”从blob存储复制到数据库中的临时表“a”中,我可能会在一秒钟内得到几个需要插入到单独表中的文件 问题是,当我使用“Microsoft Azure Storage Explorer”在队列中手动添加一条且仅添加一条消息以触发该功能时,它工作得非常好,我可以看到目标表中的数据,但当它自动运行时,它必须处理多个文件。因此,没有任何表包含任何数据,也没

我有一个azure函数,它从azure数据库调用存储过程。它的工作方式是,当它收到消息“a”时,它应该使用BULK INSERT.csv文件将文件“a”从blob存储复制到数据库中的临时表“a”中,我可能会在一秒钟内得到几个需要插入到单独表中的文件

问题是,当我使用“Microsoft Azure Storage Explorer”在队列中手动添加一条且仅添加一条消息以触发该功能时,它工作得非常好,我可以看到目标表中的数据,但当它自动运行时,它必须处理多个文件。因此,没有任何表包含任何数据,也没有复制任何文件!也不例外!奇怪


那么,当我们同时调用多个azure函数时,特别是当它们通过调用同一个存储过程来处理不同的源和目标而具有数据库事务时,有人知道它是如何工作的吗?

此函数的相关队列正在由另一个azure函数填充,该函数将文件从FileShare复制到BlobStorage因为这个过程是异步的,所以首先azure函数复制文件,然后在复制完成之前,它执行代码的其余部分,其中包含向第二个队列添加消息,并在文件大小为0KB时运行第二个函数

如果可以避免的话,我觉得让多个线程尝试运行访问类似表的同一存储过程不是一个理想的用例。你有没有办法只需要一个线程,比如webjob,读取队列并仅在最后一次执行完成后再次运行存储过程?@Slothario我试图访问一个甚至不存在的文件,因为它是正在运行的复制进程。您可能应该验证是否需要同时上载数据库,因为多个作业试图在重载下同时访问数据库只会给数据库带来不必要的压力。显然,作业应该是顺序的——想想看,如果你被100个作业砸到,它们是否应该同时运行?然而,如果真的有它的用例,或者不管你多么想重写,你都不能重写代码,你必须做更多的研究来找出发生了什么,因为我无法从描述中告诉你发生了什么。@Slothario你能看看这个吗?这是我的另一个问题: