Ćwiczenie — obsługa komunikatu w kolejce

Ukończone

W tym ćwiczeniu rozszerzysz aplikację na trasę, która może wyzwalać komunikat w kolejce komunikatów.

Uwaga

Przed rozpoczęciem tego ćwiczenia upewnij się, że pobrano rozszerzenie Azurite, pobrano Eksplorator usługi Azure Storage i pobrano narzędzia Azure Functions Core Tools.

Tworzenie szkieletu aplikacji

W tym ćwiczeniu zaczniemy od nowej aplikacji usługi Azure Functions. Utwórz nowy katalog i umieść go samodzielnie.

  1. Wybierz pozycję Wyświetl>paletę poleceń.

  2. Wybierz pozycję Azure Functions: Utwórz nowy projekt.

  3. Wybierz folder, zazwyczaj bieżący folder.

  4. W obszarze Wybierz język wybierz pozycję Niestandardowa procedura obsługi.

  5. W obszarze Wybierz szablon dla pierwszej funkcji wybierz pozycję HttpTrigger.

  6. Nadaj aplikacji nazwę, taką jak queueTrigger.

  7. Wybierz poziom autoryzacji anonimowego. Jeśli chcesz, możesz to zmienić później.

  8. W katalogu głównym utwórz plik o nazwie server.go. Projekt powinien teraz zawierać następujące pliki:

    queueTrigger/
      function.json
    .funcignore
    .gitignore
    host.json
    local.settings.json
    proxies.json
    server.go 
    
  9. Przejdź do pliku function.json w queueTrigger katalogu. Znajdź pierwszy wpis powiązania w elemecie type :

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

    Zmień ten wpis powiązania na następującą konfigurację:

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

    W tym kroku ustawisz name właściwość . Będziesz się do niego odwoływać w dalszej części kodu. Zmieniono również typ wyzwalacza na queueTrigger, co umożliwia nasłuchiwanie komunikatów w kolejce.

    Wartość queueName wskazuje określoną kolejkę. Po uruchomieniu emulatora później utworzysz kolejkę o takiej nazwie.

    Na koniec wskazano zmienną w local.settings.json, która będzie zawierać parametry połączenia do kolejki.

Tworzenie aplikacji

W tym momencie masz szkielet aplikacji. Teraz możesz dodać kod, który może obsługiwać przychodzące komunikaty w kolejce.

  1. Otwórz plik server.go i dodaj następujący kod:

    package main
    
    import (
      "encoding/json",
      "fmt"
      "io/ioutil"
      "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))
    }
    

    Masz teraz trasę skonfigurowaną na stronie /queueTrigger.

  2. Znajdź sekcję importu i dodaj w niej następujące struktury:

    type InvokeRequest struct {
      Data     map[string]json.RawMessage
      Metadata map[string]interface{}
    }
    
  3. Znajdź metodę queueHandler() i dodaj ją w następujący sposób:

    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)
    }
    

    Kod najpierw odczytuje treść ze strumienia odpowiedzi przychodzącej i dekoduje ją:

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

    Następnie sam komunikat jest wykopyny za pomocą wywołania metody Unmarshal():

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

    Teraz, gdy masz komunikat, wydrukujmy go.

  4. Dodaj następujący kod:

    fmt.Println(parsedMessage) // your message
    

    Kod jest teraz napisany, ale musisz skonfigurować projekt, aby można go było przetestować.

  5. W pliku host.json znajdź defaultExecutablePath element i nadaj mu wartość ./server.

    Uwaga

    W przypadku systemu Windows należy użyć wartości .\server.exe.

  6. Skompiluj plik server.go , uruchamiając polecenie go build w katalogu głównym projektu:

    go build server.go
    

Konfigurowanie środowiska

Następnym krokiem jest skonfigurowanie środowiska. Ponieważ programujesz lokalnie, musisz go skonfigurować, aby można było komunikować się z emulowaną kolejką komunikatów.

  1. W pliku local.settings.json znajdź element o Values nazwie AzureWebJobsStorage (lub dodaj go, jeśli go brakuje). Nadaj jej wartość UseDevelopmentStorage=true. Wpis JSON powinien wyglądać następująco:

    "AzureWebJobsStorage" : "UseDevelopmentStorage=true"
    
  2. Uruchom rozszerzenie Azurite, otwierając paletę poleceń (Wyświetl>paletę poleceń), a następnie wybierając pozycję Azurite: Uruchom usługę kolejki.

    Uwaga

    Ten krok spowoduje utworzenie niektórych plików lokalnych w projekcie.

  3. Otwórz Eksplorator usługi Azure Storage. Po lewej stronie zawartość emulatora jest widoczna.

  4. Kliknij prawym przyciskiem myszy węzeł Kolejki i wybierz opcję utworzenia nowej kolejki. Nadaj mu elementy nazw.

    Zrzut ekranu przedstawiający emulator w Eksplorator usługi Azure Storage z utworzoną nową kolejką.

    Uwaga

    Możesz nazwać kolejkę, co chcesz. Jednak chcesz skonfigurować plik function.json . Niezależnie od nazwy kolejki w tym miejscu należy przejść do function.json.

  5. Znajdź function.json w queueTrigger katalogu. Upewnij się, że tablica bindings ma następujący wpis:

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

    Właściwość ma taką samą nazwę jak kolejka queueName utworzona w Eksplorator usługi Azure Storage. Właściwość connection wskazuje wartość skonfigurowaną w local.settings.json.

    Właściwość name ma wartość queueItem. Kod języka Go używa tej wartości do analizowania komunikatu kolejki.

Uruchom aplikację

W tym momencie wszystko jest skonfigurowane. Wystarczy uruchomić aplikację, uruchomić Eksplorator usługi Azure Storage i utworzyć komunikat kolejki. Kod powinien mieć możliwość korzystania z tego komunikatu.

  1. W terminalu uruchom func start polecenie w katalogu głównym projektu:

    func start
    
  2. W programie Visual Studio Code otwórz paletę poleceń i uruchom usługę Azurite: Uruchom usługę kolejki.

  3. Uruchom Eksplorator usługi Azure Storage, jeśli jeszcze nie został uruchomiony.

  4. W Eksplorator usługi Azure Storage wybierz pozycję Dodaj komunikat:

    Zrzut ekranu przedstawiający wybór dodawania komunikatu w kolejce.

  5. W wyświetlonym oknie dialogowym wprowadź komunikat i wybierz przycisk OK. Zostaną wyświetlone szczegóły utworzonego komunikatu.

    Zrzut ekranu przedstawiający szczegóły komunikatu.

  6. W programie Visual Studio Code funkcja powinna być teraz uruchomiona. W terminalu powinien zostać wyświetlony komunikat wydrukowany jako ostatni wiersz.

    Funkcja mogła korzystać z komunikatu kolejki i zapisywać jego zawartość.

Gratulacje! Utworzono funkcję platformy Azure w języku Go, która może wyzwalać komunikat w kolejce. Przeanalizowano również ten komunikat.

To, co robisz z wiadomością przychodzącą, to ty. Można na przykład przechowywać je w bazie danych, a może wysyłać jako ładunek w żądaniu internetowym.