我有一个通过服务总线触发的Azure功能,该功能基本上会等待很长时间(1-4.5分钟(使用取消令牌进行管理,以防止功能超时和主机重新启动)。
我想处理尽可能多的这些长时间等待的消息。 (理想情况下,同一时间大约是1200。)
首先,我在App Service计划上运行我的功能(并发调用= 1200),但是我认为每个触发器都会创建一个线程,而1200个线程会引起一些问题。
因此,我决定在批量大小为32的Consumption上运行它,这个主意是我可以避免创建大量线程并在看到队列建立时扩展横向的消费函数。
不幸的是,情况恰好相反,Consumption函数将处理32条消息,但是即使队列中有1000多个项目,它也不会扩展。更糟糕的是,尽管队列中还有很多项目,但有时函数会进入睡眠状态。
我觉得我最好的选择是将消息分组,因此例如不是1条消息= 1个长时间等待,而是1条消息可能是100个等待,但是我的体系结构实际上不允许我轻松地对消息进行分组(因为如果某些任务失败但某些任务成功,则可以使用无效字母轻松地对此进行管理,但是通过分组,我需要保持状态以对此进行跟踪)。是否有一种现有方法可以有效地使许多(独立)长期运行的天蓝色功能(使用或服务计划)等待。