【问题标题】:Azure Functions QueueTrigger with variable name, QueueTriggerAttribute restrictions具有变量名称的 Azure Functions QueueTrigger、QueueTriggerAttribute 限制
【发布时间】:2019-11-27 16:40:42
【问题描述】:

假设以下典型的Queue Trigger函数:

public void Run([QueueTrigger("queue1")]object data, ILogger log)
{
    // Do something with data
}

我的问题是"queue1" 必须是一个常量字段,所以它必须在编译时定义。 另外,我想要一个队列触发器的基类,它可以像这样工作:

public abstract class QueueBase<TModel>
{
    public void Run([QueueTrigger("queueName")]TModel data, ILogger log)
    {
        // Do something with data, log something etc.
        OnRunExecuted(data);
        // Do something with data, log something etc.
    }

    public abstract void OnRunExecuted(TModel data);
}

有了这个,我可以编写自己的类,这些类继承自 QueueBase,但甚至可以存在于没有 Microsoft.Azure.WebJobs 依赖项的库中:

public class MyQueueHandler : QueueBase<MyModel>
{
    public void OnRunExecuted(MyModel data) => ...;
}

但是不可能传入队列名称...是吗?

【问题讨论】:

    标签: c# .net .net-core azure-functions


    【解决方案1】:

    我记得属性 QueueTrigger 只接受 const 字符串,所以你可以尝试使用环境变量来做一些技巧,比如帖子how to pass dynamic queue name

    【讨论】:

      【解决方案2】:

      binding expressions:

      简而言之,你可以传入一个可变队列名称为“%queue-name-variable%”

      [FunctionName("QueueTrigger")]
      public static void Run(
          [QueueTrigger("%queue-name-variable%")]string myQueueItem, 
          ILogger log)
      {
          log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
      }
      

      input-queue-name 在您的配置中定义,如

      {"queue-name-variable": "queue-name-in-current-env"}
      

      【讨论】:

      • 感谢您的贡献,我知道有这个选项。我希望我编写的类更加灵活,并且让“队列名称变量”始终映射到一个特定的其他值(每个环境)并不是很有帮助。 INameResolver 的问题在于,它不提供任何解析上下文,因此在方法 Resolve (string name) 中,您没有太多决定权。
      猜你喜欢
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多