我已使用队列触发器创建了测试Azure功能。 当我在本地仿真器中运行此功能时,它将起作用。但是,当我在Azure上部署它时,它似乎无法正常工作(消息未从队列中删除)。
功能
[FunctionName("Function1")]
public static void Run([QueueTrigger("azurefunc", Connection = "StorageConnectionString")]string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
// PERFORMANCE TEST
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 9000; j++)
{
// Do nothing.
// Or do something
string myAwesomeTempString = "How are you";
myAwesomeTempString += "?";
}
}
try
{
var queueMessage = new CloudQueueMessage (myQueueItem);
QueueApi.DeleteMessage (QueueApi.AzureFunctionStorageQueue, queueMessage);
}
catch
{
}
}
local.settings.json
{"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AZURE_STORAGE_CONNECTION_STRING",
"AzureWebJobsDashboard": "AZURE_STORAGE_CONNECTION_STRING",
"StorageConnectionString": "AZURE_STORAGE_CONNECTION_STRING",
"serviceBusAccount": "SERVICE_BUS_CONNECTION_STRING"
}}
QueueApi的一部分
/// <summary>
/// Creates instance of Queue Storage
/// </summary>
/// <param name="queueName">Name of queue storage</param>
/// <returns>The instance of queue storage</returns>
private static CloudQueue CreateStorageQueue (string queueName)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse ("AZURE_STORAGE_CONNECTION_STRING");
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient ();
CloudQueue queue = queueClient.GetQueueReference (queueName);
queue.CreateIfNotExists ();
return queue;
}
/// <summary>
/// Deletes message from queue.
/// </summary>
/// <param name="queue">The queue storage instance</param>
/// <param name="message">Message to be deleted</param>
public static void DeleteMessage (CloudQueue queue, CloudQueueMessage message)
{
CheckInstances ();
if (message != null)
{
queue.DeleteMessage (message);
}
}
我创建了 Azure Service Bus 帐户只是为了测试另一种方法,但我确实更愿意使用 Azure Storage Queue 。
有人可以帮助我吗?
非常感谢您
答案 0 :(得分:0)
队列触发器将在函数执行结束时自动删除传入的消息,因此您不需要自己删除它。您的代码实际上创建了一条新消息,该消息具有与消息功能相同的消息内容,并尝试删除队列中不存在的新消息。
该代码在Azure上不起作用的原因是您可能忘记了在应用程序设置中添加StorageConnectionString
。 local.settings.json
不会发布到Azure,因为它仅用于本地开发。