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

时间:2018-01-10 04:45:02

标签: azure-functions

我有一个具有ServiceBusTrigger绑定的Azure功能应用程序。

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

我想在本地调试它而无需连接到Azure Service Bus;但是,没有可用的ASB仿真器(Using Azure Service Bus in local)。因此,我的下一步工作是在本地调试时切换到存储队列(因为我在我的设备上运行Azure存储模拟器)。

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

我的问题是:我们是否有办法定义绑定,因为它会在本地环境中侦听存储队列,但在部署到生产环境时会切换到服务总线?

这听起来像是XY问题,所以如果有人有更好的想法来解决我的X问题,那么我全都是耳朵。

1 个答案:

答案 0 :(得分:1)

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

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

  2. 您可以将函数体移动到共享方法,然后创建两个相同的Azure函数:一个具有Service Bus触发器,一个具有Storage Queue触发器。将Disable属性添加到它们中,并使此属性声明设置名称。如果该设置设置为true,则该功能将被禁用。根据环境禁用一个或另一个功能。