Ć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 Eksploratora 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 Niestandardowy program 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.goPrzejdź do pliku function.json w
queueTriggerkatalogu. 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
namewł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ść
queueNamewskazuje 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ć ciąg połączenia z kolejką.
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" "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 messageKod jest teraz napisany, ale musisz skonfigurować projekt, aby można go było przetestować.
W pliku host.json znajdź
defaultExecutablePathelement 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 buildz katalogu głównego 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
ValuesnazwieAzureWebJobsStorage(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 nazwę elementy.
Uwaga
Możesz nazwać kolejkę, co chcesz. Jednak chcesz skonfigurować plik function.json . Jakakolwiek nazwa kolejki tutaj musi zostać umieszczona w function.json.
W katalogu znajdź
queueTrigger. Upewnij się, że tablicabindingsma następujący wpis:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }Właściwość ma taką samą nazwę jak kolejka
queueNameutworzona w Eksplorator usługi Azure Storage. Właściwośćconnectionwskazuje wartość skonfigurowaną w local.settings.json.Właściwość
namema 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 startpolecenie w katalogu głównym projektu:func startW programie Visual Studio Code otwórz paletę poleceń i uruchom Azurite: Start Queue Service.
Uruchom Eksplorator usługi Azure Storage, jeśli jeszcze nie został uruchomiony.
W Eksploratorze 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.