如何在本地测试Azure队列触发器功能?

时间:2017-10-17 16:15:47

标签: c# azure azure-functions

我创建了一个Azure Functions project and am testing it locally。下面是我创建云队列的代码。然后它添加从我的CarComponent返回的id。

[FunctionName("CarDiscovery")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

    var connectionString = "UseDevelopmentStorage=true";
    // Parse the connection string and return a reference to the storage account.
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);

    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    // Retrieve a reference to a container.
    CloudQueue queue = queueClient.GetQueueReference("discovery-queue");

    // Create the queue if it doesn't already exist
    queue.CreateIfNotExists();

    CarComponent cars = new CarComponent();
    var carList = cars.GetActiveCars();

    foreach (var car in carList)
    {
        byte[] toAdd = BitConverter.GetBytes(car.Id);
        CloudQueueMessage message = new CloudQueueMessage(toAdd);  // <-- Put the ID of each metro in the message
        queue.AddMessage(message);
    }
}

当我使用azure存储模拟器启动该功能时,它成功运行。

我想创建另一个使用Queue触发器运行的azure函数,我可以在本地测试。

(1)我在哪里可以查看已添加到开发存储中的当前消息?

(2)使用队列触发器创建Azure功能时,我指定什么作为连接? (见下文)

enter image description here

2 个答案:

答案 0 :(得分:3)

可以找到队列中的消息

根据this article

  

存储模拟器使用本地Microsoft SQL Server实例和本地文件系统来模拟Azure存储服务。默认情况下,存储模拟器使用Microsoft SQL Server 2012 Express LocalDB中的数据库。您可以选择配置存储模拟器以访问SQL Server的本地实例,而不是LocalDB实例。

因此,您需要:

  • 安装和配置Azure存储模拟器;
  • 启动它;
  • 当它正在运行时,通过网址访问队列服务:http://127.0.0.1:10001/<account-name>/<resource-path>

在最坏的情况下,您可以将本地功能绑定到真正的Azure存储队列。

队列连接字符串

简而言之:安装VS Tools for Azure Functions;添加本地设置;将QueueTrigger属性添加到函数方法参数中。

Azure函数的

Visual Studio Tools

创建新的Function项目后,将local.settings.json文件添加到具有类似内容的解决方案的根目录中:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "YourQueueConnectionString": "http://127.0.0.1:10001/MyAccount"
  }
}

添加QueueTrigger属性。您的Azure功能入口点应该是:

[FunctionName("MyQueueFunction")]
public static async Task Run([QueueTrigger("MyQueue", Connection = "YourQueueConnectionString")] string message, TraceWriter log)

答案 1 :(得分:2)

1)要查看队列中的消息,您可以使用Azure存储资源管理器:https://azure.microsoft.com/en-us/features/storage-explorer/

2)要让您的功能连接到队列,您需要存储帐户的密钥。您可以通过以下SO答案获得此信息:https://stackoverflow.com/a/43219736/84395

获得密钥后,在local.settings.json

中添加新值
{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>",
    "MyStorageAccountConnection": "DefaultEndpointsProtocol=https;AccountName=[XXXX_YOUR_ACCOUNT_NAME_XXXX];AccountKey=[XXXX_YOUR_KEY_XXXX];EndpointSuffix=core.windows.net"
  }
}

所以回答你的第二个问题:你会指定MyStorageAccountConnection作为连接的名称。