代码之家  ›  专栏  ›  技术社区  ›  Harry Ninh

如何根据环境定义函数触发器

  •  1
  • Harry Ninh  · 技术社区  · 8 年前

    我有一个Azure Function应用程序 ServiceBusTrigger 结合

    public static void Run([ServiceBusTrigger("my-queue")]string request, TraceWriter log)
    

    我想在本地调试它,而不必连接到Azure服务总线;但是,没有可用的ASB模拟器( Using Azure Service Bus in local ). 因此,我的下一个努力是在仅在本地调试时切换到存储队列(因为我的设备上正在运行Azure Storage Emulator)。

    public static void Run([QueueTrigger("my-queue")]string request, TraceWriter log)
    

    我的问题是:我们是否有一种方法来定义绑定,使其能够侦听本地环境上的存储队列,但在部署到生产环境时会切换到服务总线?

    这听起来像是XY问题,所以如果有人有更好的主意来解决我的X问题,我洗耳恭听。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mikhail Shilkov    8 年前

    不支持基于配置替换触发器类型。所以,你必须在某个地方找到解决办法。选项:

    1. 使用服务总线进行测试,但使用不同的命名空间或队列名称。连接字符串是应用程序设置的一部分,因此您可以根据环境进行设置。您可以使用以下命令配置队列名称 ServiceBusTrigger("%my-queue%") ,在这种情况下,应用程序将搜索 my-queue 应用程序设置。

    2. 您可以将函数体移动到共享方法,然后创建两个在其他方面相等的Azure函数:一个具有服务总线触发器,一个具有存储队列触发器。添加 Disable 属性,并使该属性声明设置名称。如果该设置设置为 true ,该功能将被禁用。根据环境禁用一个或另一个功能。

    推荐文章