我希望将项目添加到服务总线主题中,然后关闭“直播”主题。订阅并发送到实际网站,并启动了“开发”。订阅并发送到开发站点。
[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;
}
}
该函数的实现完全相同,唯一不同的是订阅的名称和使用的端点。不幸的是,订阅名称是注释的一部分,因此它必须是常量。有什么办法可以在不重复所有代码的情况下获得所需的效果吗?
为了澄清,我想创建两个单独的部署 - 一个用于实时,一个用于开发。对于每个部署,我将更新环境设置,这将确定该函数绑定的订阅。
答案 0 :(得分:3)
您可以通过将它们包含在百分号中来引用环境变量:
ServiceBusTrigger("%myTopic%", "%mySubscription%")
其中myTopic
和mySubscription
是应用设置中的环境变量。
答案 1 :(得分:0)
您不能拥有由两个服务总线主题(开发与实时)触发的单个功能,但您可以将函数的功能转移到可以从两个函数调用的辅助方法中。