代码之家  ›  专栏  ›  技术社区  ›  Andrew Williamson

在ServiceBustigger中引用主题名称的环境变量

  •  1
  • Andrew Williamson  · 技术社区  · 7 年前

    我希望将项目添加到service bus主题,然后退出“Live”订阅并发送到Live站点,然后退出“Development”订阅并发送到dev站点。

    [FunctionName("AddFoo")]
    public static async Task AddFooAsync(
        [ServiceBusTrigger("topic-foo", "Live")]QueueItem item,
        TraceWriter log)
    {
        var endpoint = ConfigurationManager.AppSettings["EndPoint"];
        var httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Add("PublisherKey", foo.PublisherKey);
        var foos = new HttpFooStore(httpClient, endpoint);
    
        try
        {
            await foos.AddAsync(item.Value);
        }
        catch (BadRequestException)
        {
            log.Warning("Malformed request was rejected by XXX", item.PublisherName);
            return;
        }
        catch (AuthorizationException)
        {
            log.Warning("Unauthorized request was rejected by XXX", item.PublisherName);
            return;
        }
        catch (ResourceNotFoundException)
        {
            log.Warning("Request for unknown tracker was rejected by XXX", item.PublisherName);
            return;
        }
        catch (Exception e)
        {
            log.Error("Request to XXX was unsuccessful", e, item.PublisherName);
            throw e;
        }
    }
    

    函数的实现完全相同,唯一不同的是订阅的名称和使用的端点。遗憾的是,订阅名称是注释的一部分,因此它必须是常量。有没有什么方法可以在不必复制所有代码的情况下获得所需的效果?

    编辑

    为了澄清这一点,我想创建两个单独的部署—一个用于实时部署,另一个用于开发。对于每个部署,我都会更新环境设置,这将决定函数绑定到哪个订阅。

    2 回复  |  直到 7 年前
        1
  •  6
  •   Andrew Williamson    7 年前

    您可以通过在环境变量周围使用百分号来引用它们:

    ServiceBusTrigger("%myTopic%", "%mySubscription%")
    

    哪里 myTopic mySubscription 是应用程序设置中的环境变量。

        2
  •  0
  •   Marie Hoeger    7 年前

    您不能有由两个服务总线主题(开发与实时)触发的单个函数,但您可以将函数的内容移动到可以从两个函数调用的助手方法中。