Упражнение. Обработка сообщения очереди

Завершено

В этом упражнении вы дополните приложение маршрутом, который может активировать сообщение в очереди сообщений.

Формирование шаблона приложения

В этом упражнении мы создадим новое приложение Функций Azure. Создайте новый каталог и зайдите в него.

  1. Выберите Вид>Палитру команд.

  2. Выберите Функции Azure: создание проекта.

  3. Выберите папку. Как правило, это будет текущая папка.

  4. В разделе "Выбор языка" выберите "Настраиваемый обработчик".

  5. В разделе "Выбор шаблона для первой функции" выберите HttpTrigger.

  6. Присвойте приложению имя, например queueTrigger.

  7. Выберите уровень авторизации анонимного. При необходимости имя можно изменить позже.

  8. В корневом каталоге создайте файл с именем server.go. Теперь в проекте должны быть следующие файлы:

    queueTrigger/
      function.json
    .funcignore
    .gitignore
    host.json
    local.settings.json
    proxies.json
    server.go 
    
  9. Перейдите к файлуfunction.json в каталоге queueTrigger . Найдите первую запись привязки в элементе type:

    {
       "authLevel": "anonymous",
       "type": "httpTrigger",
       "direction": "in",
       "name": "req",
       "methods": [
         "get",
         "post"
       ]
     }
    

    Измените запись привязки, применив следующую конфигурацию:

    {
       "name": "queueItem",
       "type": "queueTrigger",
       "direction": "in",
       "queueName" : "items",
       "connection": "AzureWebJobsStorage"
    }
    

    На этом этапе задается свойство name. Позже вы обратитесь к нему в коде. Вы также изменили тип триггера на queueTrigger, что дает возможность ожидать передачи сообщений очереди.

    Значение queueName указывает на определенную очередь. Когда вы позже запустите эмулятор, вы создадите очередь с таким именем.

    Наконец, вы указали переменную в local.settings.json , которая будет содержать строку подключения к очереди.

Создание приложения

На этом этапе у вы имеете основу приложения. Теперь все готово к добавлению кода, который может обрабатывать входящие сообщения очереди.

  1. Откройте файл server.go и добавьте следующий код:

    package main
    
    import (
      "encoding/json"
      "fmt"
      "log"
      "net/http"
      "os"
    )
    
    func queueHandler(w http.ResponseWriter, r *http.Request) {
    }
    
    func main() {
      customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
      if !exists {
        customHandlerPort = "8080"
      }
      mux := http.NewServeMux()
      mux.HandleFunc("/queueTrigger", queueHandler)
      fmt.Println("Go server Listening on: ", customHandlerPort)
      log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    }
    

    Теперь в /queueTrigger у вас есть настроенный маршрут.

  2. Найдите раздел импорта и добавьте в него следующие структуры:

    type InvokeRequest struct {
      Data     map[string]json.RawMessage
      Metadata map[string]interface{}
    }
    
  3. Найдите метод queueHandler() и измените его следующим образом:

    func queueHandler(w http.ResponseWriter, r *http.Request) {
      var invokeRequest InvokeRequest
    
      d := json.NewDecoder(r.Body)
      d.Decode(&invokeRequest)
    
      var parsedMessage string
      json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
    }
    

    Сначала код считывает текст из потока входящих ответов и декодирует его:

    var invokeRequest InvokeRequest
    
    d := json.NewDecoder(r.Body)
    d.Decode(&invokeRequest)
    

    Затем извлекается само сообщение с помощью вызова в Unmarshal():

    var parsedMessage string
    json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
    

    Теперь, когда у вас есть сообщение, давайте напечатаем его.

  4. Добавьте следующий код:

    fmt.Println(parsedMessage) // your message
    

    Теперь код написан, но необходимо настроить проект, чтобы его можно было протестировать.

  5. В файлеhost.json найдите defaultExecutablePath элемент и присвойте ему значение ./server.

    Примечание.

    Для Windows следует использовать значение .\\server.exe.

  6. Создайте файл server.go , выполнив команду go build в корневом каталоге проекта:

    go build server.go
    

Настройка среды

Следующий шаг — настройка окружения. Так как разработка осуществляется локально, необходимо настроить ее, чтобы вы могли взаимодействовать с эмулируемой очередью сообщений.

  1. В файле local.settings.json найдите элемент с названием Values (или добавьте его, если он отсутствует). Присвойте ему значение UseDevelopmentStorage=true. Ваша запись JSON должна выглядеть следующим образом:

    "AzureWebJobsStorage" : "UseDevelopmentStorage=true"
    
  2. Запустите расширение Azurite, открыв палитру команд (просмотр>палитры команд) и выбрав Azurite: Запустить службу очередей.

    Примечание.

    На этом шаге будут созданы некоторые локальные файлы в проекте.

  3. Откройте обозреватель службы хранилища Azure. В левой части отображается содержимое эмулятора.

  4. Щелкните правой кнопкой мыши узел очередей и выберите создание новой очереди. Присвойте ему элементы имени.

    Снимок экрана: эмулятор в обозревателе службы хранилища Azure с созданной новой очередью.

    Примечание.

    Вы можете присвоить очереди имя на свое усмотрение. Однако вы собираетесь настроить файлfunction.json. Все, что вы назовете очередью здесь, должно быть внесено в function.json.

  5. В каталоге выберите queueTrigger. Убедитесь в наличии следующей записи в массиве bindings:

    {
       "name": "queueItem",
       "type": "queueTrigger",
       "direction": "in",
       "queueName" : "items",
       "connection": "AzureWebJobsStorage"
     }
    

    Свойство queueName имеет то же имя, что и очередь, созданная в Обозревателе службы хранилища Azure. Свойство connection указывает на значение, настроенное в local.settings.json.

    Свойство name имеет значение queueItem. Ваш код Go использует это значение для анализа сообщения очереди.

Выполнить приложение

На этом этапе все настройки заданы. Вам нужно только запустить приложение, запустить Обозреватель службы хранилища Azure и создать сообщение очереди. Ваш код должен быть способен воспринять это сообщение.

  1. Из терминала выполните команду func start в корневом каталоге проекта:

    func start
    
  2. В Visual Studio Code откройте палитру команд и запустите Azurite: запуск службы очередей.

  3. Запустите Обозреватель службы хранилища Azure, если он еще не запущен.

  4. В обозревателе службы хранилища Azure выберите "Добавить сообщение":

    Снимок экрана: выбор для добавления сообщения в очередь.

  5. В появившемся диалоговом окне введите сообщение и нажмите кнопку "ОК". После этого вы увидите сведения о созданном сообщении.

    Снимок экрана: сведения о сообщении.

  6. Теперь ваша функция должна работать в Visual Studio Code. В терминале теперь должно отображаться сообщение , напечатанное в качестве последней строки.

    Функция смогла воспринять сообщение очереди и записать его содержимое.

Поздравляем! Вы создали функцию Azure в Go, которая может активироваться при получении сообщения очереди. Вы также проанализировали это сообщение.

Что делать с входящим сообщением, решать вам. Например, его можно сохранить в базе данных или отправить в качестве полезных данных в веб-запросе.