我有一个如下所示的 Azure 函数:
namespace TestAzureFunction
{
[StorageAccount("TEST_STORAGE_ACCOUNT")]
public static class SendEmailTestQueue
{
[FunctionName(nameof(SendEmailTestQueue))]
public async static Task Run(
[QueueTrigger("send-email-test-queue-name")]SendEmailTestQueueModel model,
ILogger logger)
{
// SEND EMAIL
logger.LogInformation("Email Sent");
}
}
}
我将消息添加到队列的方式如下:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("** connectionString **");
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queueReference = queueClient.GetQueueReference("send-email-test-queue-name");
await queueReference.CreateIfNotExistsAsync();
SendEmailTestQueueModel model = new SendEmailTestQueueModel
{
Subject = "Email Subject",
Body = "Email Body"
}
CloudQueueMessage queueMessage = new CloudQueueMessage(JsonConvert.SerializeObject(model));
await queueReference.AddMessageAsync(queueMessage);
现在一切正常。
如何声明上面的azure函数imperative ?
以下是我失败的尝试:
namespace TestAzureFunction
{
public static class SendEmailTestQueue
{
public async static Task Run(
Binder binder,
ILogger logger)
{
var attributes = new Attribute[]
{
new QueueTriggerAttribute("send-email-test-queue-name"),
new StorageAccountAttribute("TEST_STORAGE_ACCOUNT")
};
SendEmailTestQueueModel model = await binder.BindAsync<SendEmailTestQueueModel>(attributes);
// SEND EMAIL
logger.LogInformation("Email Sent");
}
}
最佳答案
目前它不支持带有触发器的命令式绑定(bind)模式。请向下滚动doc底部您提供。
它列出了每种绑定(bind)类型的属性,关于存储队列,您可以发现它只提供了QueueAttribute
和StorageAccountAttribute
。
从您的代码中,假设您想使用 QueueAttribute
绑定(bind)来发送队列消息。最简单的方法是使用Queue
output binding .
[FunctionName("Function1")]
public static void Run([QueueTrigger("%queuename%", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log,
[Queue("queuetest",Connection = "AzureWebJobsStorage")]CloudQueue outqueue
)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
CloudQueueMessage queueMessage = new CloudQueueMessage(myQueueItem);
outqueue.AddMessageAsync(queueMessage);
}
关于命令式输出绑定(bind),可以引用下面的代码。
public static async System.Threading.Tasks.Task RunAsync([QueueTrigger("%queuename%", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log,
IBinder binder
)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
var queuearribute = new QueueAttribute("test");
var queue = await binder.BindAsync<CloudQueue>(queuearribute);
await queue.AddMessageAsync(new CloudQueueMessage(myQueueItem));
}
关于azure - 如何创建命令式 Azure 队列输入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237988/