Функция триггера очереди Azure - локальная интеграция

Я создаю простую функцию Azure с запуском очереди, используя Visual Studio. Я подключаю его к своей учетной записи хранения, но по какой-то причине он не работает. Любая помощь приветствуется.

Это мой код: (автоматически создается VS)

[FunctionName("QueueTest")]
public static void Run([QueueTrigger("my-queue", Connection = "")]string myQueueItem, TraceWriter log)        
{            
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
}

Это мой local.settings.json

{
"IsEncrypted": false,  
  "Values":{

  "AzureWebJobsStorage":"DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey"
  }
}

person ArslanIqbal    schedule 22.10.2018    source источник
comment
Итак, вы пытаетесь запустить функцию локально, но она не запускается, когда вы добавляете сообщение в очередь?   -  person Thomas    schedule 22.10.2018
comment
да. это не срабатывает   -  person ArslanIqbal    schedule 22.10.2018


Ответы (3)


Итак, я разобрался в проблеме. Все конфигурации были в порядке. Проблема заключалась в том, что версия функции Azure для моего приложения-функции была 1, но по какой-то причине, вероятно, из-за последнего пакета SDK / WebJobs, версия 1 работала некорректно. Поэтому мне пришлось создать еще одно приложение-функцию с AzureFunctionVersion 2, и все работало нормально.

person ArslanIqbal    schedule 22.10.2018

Вам необходимо добавить строку подключения вашей учетной записи хранения очереди в local.settings.json, а затем указать имя строки подключения в качестве параметра Connection для QueueTrigger, например в local.settings.json

"Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=accountkey",
    "MyStorage": "DefaultEndpointsProtocol=https;AccountName=accountname2;AccountKey=accountkey2;EndpointSuffix=core.windows.net"
}

и в вашем коде

[QueueTrigger("my-queue", Connection = "MyStorage")]string myQueueItem
person MarkXA    schedule 22.10.2018

Триггер очереди по умолчанию использует учетную запись AzureWebJobsStorage. Все, что вам нужно сделать, это просто удалить параметр Connection из атрибута:

[FunctionName("QueueTest")]
public static void Run([QueueTrigger("my-queue")]string myQueueItem, TraceWriter log)        
{            
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
}

В идеале, если вы Windows пользователь, используйте эмулятор хранения Azure для подключения к локальным очередям. . После этого измените строку подключения в вашем local.settings.json файле:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
  }
}

Если вы не являетесь пользователем Windows, вы должны подключаться к очередям, размещенным на платформе Azure. Для этого найдите учетную запись хранения, связанную с вашими функциями, и скопируйте строку подключения из его настроек (Учетная запись хранения -> Ключи доступа -> Строка подключения)

person Pawel Maga    schedule 22.10.2018
comment
Да, я пользователь Windows. Я пробовал использовать эмулятор хранилища, но столкнулся с проблемой. Подумал, почему бы просто не попробовать использовать реальное хранилище, чтобы посмотреть, как оно работает, но с тех пор застрял на нем. И я попытался удалить параметр подключения, но все равно не работает - person ArslanIqbal; 22.10.2018
comment
Должно работать, это все, что нужно настроить. Проверьте, добавляете ли вы сообщение в правильную очередь в правильной учетной записи хранения. В качестве альтернативы создайте функцию http / timer / manual, которая подключается к этой очереди с помощью привязки вывода [Queue], добавьте сообщение в очередь и проверьте, что произойдет. - person Pawel Maga; 22.10.2018
comment
Я использовал ту же очередь и ту же учетную запись при создании функции на лазурном портале. Для этой функции он отлично работает. Но по какой-то причине эта функция не привязывается к очереди. - person ArslanIqbal; 22.10.2018