Ćwiczenie — obsługa komunikatu w kolejce
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.
Wybierz pozycję Wyświetl>paletę poleceń.
Wybierz pozycję Azure Functions: Utwórz nowy projekt.
Wybierz folder, zazwyczaj bieżący folder.
W obszarze Wybierz język wybierz pozycję Niestandardowa procedura obsługi.
W obszarze Wybierz szablon dla pierwszej funkcji wybierz pozycję HttpTrigger.
Nadaj aplikacji nazwę, taką jak queueTrigger.
Wybierz poziom autoryzacji anonimowego. Jeśli chcesz, możesz to zmienić później.
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
Przejdź do pliku function.json w
queueTrigger
katalogu. Znajdź pierwszy wpis powiązania w elemecietype
:{ "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 naqueueTrigger
, 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.
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
.Znajdź sekcję importu i dodaj w niej następujące struktury:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }
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.
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ć.
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
.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.
W pliku local.settings.json znajdź element o
Values
nazwieAzureWebJobsStorage
(lub dodaj go, jeśli go brakuje). Nadaj jej wartośćUseDevelopmentStorage=true
. Wpis JSON powinien wyglądać następująco:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"
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.
Otwórz Eksplorator usługi Azure Storage. Po lewej stronie zawartość emulatora jest widoczna.
Kliknij prawym przyciskiem myszy węzeł Kolejki i wybierz opcję utworzenia nowej kolejki. Nadaj mu elementy nazw.
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.
Znajdź function.json w
queueTrigger
katalogu. Upewnij się, że tablicabindings
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.
W terminalu uruchom
func start
polecenie w katalogu głównym projektu:func start
W programie Visual Studio Code otwórz paletę poleceń i uruchom usługę Azurite: Uruchom usługę kolejki.
Uruchom Eksplorator usługi Azure Storage, jeśli jeszcze nie został uruchomiony.
W Eksplorator usługi Azure Storage wybierz pozycję Dodaj komunikat:
W wyświetlonym oknie dialogowym wprowadź komunikat i wybierz przycisk OK. Zostaną wyświetlone szczegóły utworzonego komunikatu.
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.