Wyzwalacz kolejki
Kolejka komunikatów to składnik oprogramowania służący do obsługi komunikatów między procesami, wątkami lub aplikacjami. Kolejka może przechowywać komunikat, a pracownicy mogą pobierać komunikat w odpowiednim momencie.
W chmurze kolejki komunikatów mogą generować zdarzenia z ładunkiem. Usługa taka jak Azure Functions może nasłuchiwać takiego komunikatu i uruchamiać kod po opublikowaniu komunikatu.
Praca z kolejkami komunikatów
Aby funkcja Azure mogła pobrać wiadomość z kolejki wiadomości, potrzebuje wyzwalacza i prawdopodobnie powiązania.
Funkcja platformy Azure musi nasłuchiwać określonej kolejki, aby jej kod był wyzwalany po opublikowaniu nowego komunikatu w tej kolejce. Aby skonfigurować wyzwalacz, należy podać odpowiednie poświadczenia, aby kod wyzwalacza wiedział, jak nawiązać połączenie z kolejką komunikatów. Należy utworzyć wpis w pliku function.json dla funkcji, która nasłuchuje kolejki. W elemecie bindings określ te właściwości we wpisie:
| Własność | Wartość |
|---|---|
name |
Nazwa, do której można odwoływać się w kodzie |
type |
queueTrigger |
direction |
in |
queueName |
Jak nazywa się kolejka |
connection |
Zmienna konfiguracji w local.settings.json |
Przykładowy wpis można zdefiniować w następujący sposób:
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "messages-incoming",
"connection": "AzureWebJobsStorage"
}
Jeśli ta kolejka znajduje się na koncie magazynu, wartość AzureWebJobsStorage jest wartością ciągu połączenia.
Nie musisz mieć powiązania podczas pobierania komunikatu z kolejki. Jeśli jednak chcesz zapisać coś do kolejki, potrzebujesz powiązania wyjściowego. Dzięki takiemu powiązaniu uzyskujesz odwołanie do zamierzonej kolejki.
Uwaga
Obecnie tylko powiązania wyjściowe są obsługiwane w przypadku kolejek.
Rozwijaj lokalnie
Jako deweloper potrzebujesz krótkich cykli opinii. Chcesz również mieć pewność, że środowisko deweloperskie jest jak najbliżej środowiska produkcyjnego. Sposobem osiągnięcia obu tych celów jest użycie emulatora kolejki.
Emulator kolejki umożliwia symulowanie rzeczywistych komunikatów kolejki, na które będzie reagować funkcja platformy Azure. Aby użyć emulatora:
Zainstaluj emulator. Wyszukaj aplikację Azurite w programie Visual Studio Code lub pobierz rozszerzenie Azurite.
Aby użyć funkcji emulatora, uruchom ją, wybierając pozycję Azure: Uruchom usługę kolejkową na palecie poleceń.
Uruchomienie tego polecenia uruchamia nasłuchujący proces o nazwie Azure Storage Explorer, który może zostać wykorzystany przez inną aplikację. Eksplorator usługi Storage to aplikacja kliencka, która umożliwia przeglądanie zasobów w chmurze i korzystanie z funkcji emulatora.
Pobierz Eksplorator usługi Azure Storage. Następnie otwórz aplikację i zobaczysz następujące wskazanie, że emulator działa:
Utwórz kolejkę w emulatorze. Ta kolejka będzie używana podczas konfigurowania punktu końcowego funkcji. Klikając prawym przyciskiem myszy element kolejki, możesz utworzyć nową kolejkę.
Aby upewnić się, że aplikacja usługi Functions używa emulatora, należy poprawnie ustawić parametry połączenia. Otwórz .
Uwaga
Pamiętaj, aby ustawić tę właściwość inaczej, gdy przechodzisz do chmury. Powinna wskazywać rzeczywisty zasób na platformie Azure w środowisku produkcyjnym.
Zbuduj funkcję
Teraz masz skonfigurowany lokalny emulator i znajduje się na nim kolejka. Projekt został również skonfigurowany tak, aby wskazywał emulator lokalny. Teraz musisz utworzyć funkcję obsługującą wyzwalacz kolejki.
Tworzenie punktu końcowego funkcji
Jesteś gotowy, aby utworzyć funkcję, która może obsługiwać przychodzące komunikaty w kolejce. Utwórz folder dla funkcji i nadaj mu nazwę, na przykład queueTrigger. Następnie utwórz plik function.json i nadaj mu następującą zawartość:
{
"bindings": [{
"name" "queueItem",
"type": "queueTrigger",
"direction": "in",
"queueName" : "items",
"connection": "AzureWebJobsStorage"
}]
}
Wartość name elementu jest ważna, ponieważ odwołujesz się do niego później w kodzie, aby przeanalizować dane przychodzące z kolejki. Musi być typu queueTrigger, aby kolejka wyzwalała je, gdy pojawi się nowa wiadomość.
Element queueName jednoznacznie identyfikuje kolejkę, z którą się komunikujesz. Niezależnie od tego, co tutaj wpiszesz, musi być zgodne z tym, jak nazywasz kolejkę w emulatorze lub jak później nazywasz swoją rzeczywistą kolejkę na platformie Azure.
Element connection wskazuje wartość AzureWebJobsStorage elementu w local.settings.json.
Obsługa komunikatu kolejki
Aby obsłużyć komunikat kolejki przychodzącej, musisz napisać kod, który może przeanalizować potrzebny komunikat. W tym momencie możesz zdecydować, co zrobić dalej. Możesz na przykład uruchomić żądanie internetowe, umieścić ten komunikat w innej kolejce lub wysłać komunikat do bazy danych.
Konfigurowanie trasy
Potrzebna jest trasa do obsługi żądań przychodzących. Usługa Azure Functions będzie obsługiwać żądania do kolejki na poziomie głównym. Po skonfigurowaniu trasy w następujący sposób żądanie zostanie wywołane jako http://localhost:<port>/queueTrigger:
http.HandleFunc("/queueTrigger", handleQueueTrigger)
Dekodowanie żądania
Po wysłaniu komunikatu kolejki do Ciebie ma następujący kształt:
{
"Data": {
"queueItem": "your message"
},
"Metadata": {
"DequeueCount": 1,
"ExpirationTime": "2019-10-16T17:58:31+00:00",
"Id": "800ae4b3-bdd2-4c08-badd-f08e5a34b865",
"InsertionTime": "2019-10-09T17:58:31+00:00",
"NextVisibleTime": "2019-10-09T18:08:32+00:00",
"PopReceipt": "AgAAAAMAAAAAAAAAAgtnj8x+1QE=",
"sys": {
"MethodName": "QueueTrigger",
"UtcNow": "2019-10-09T17:58:32.2205399Z",
"RandGuid": "24ad4c06-24ad-4e5b-8294-3da9714877e9"
}
}
}
W ramach dekodowania żądania przychodzącego potrzebna jest struktura pomocnika, która modeluje poprzedni komunikat. Powinien on wyglądać następująco:
type InvokeRequest {
Data map[string]json.RawMessage
Metadata map[string]interface{}
}
Zacznij pisać kod, aby pobrać to żądanie przychodzące i zdekodować je:
func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
var invokeRequest InvokeRequest
d := json.NewDecoder(r.Body)
d.Decode(&invokeRequest)
}
Teraz jesteś w momencie, w którym żądanie zostało zdekodowane, ale musisz przeanalizować sam komunikat kolejki.
Analizowanie komunikatu kolejki
Po zdekodowaniu żądania z żądania można pobrać komunikat kolejki we właściwości Data. Należy również odwołać się do komunikatu za pomocą wartości właściwości name, którą skonfigurowano w pliku function.json. Kod pobierania komunikatu to jeden wiersz podobny do następującego:
invokeRequest.Data["queueItem"]
Ponieważ musisz mieć możliwość odczytania tej wiadomości w postaci zwykłego tekstu, użyjesz biblioteki JSON i przeanalizujesz ją. Biblioteka JSON będzie używać metody Unmarshal(), która przyjmuje dwa parametry: komunikat do przeanalizowania oraz zmienną, w której zostanie umieszczony przeanalizowany komunikat. Dlatego kod musi wyglądać następująco:
var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
W tym momencie parsedMessage zawiera komunikat. Jeśli chcesz wydrukować go w konsoli programu , użyj następującego kodu:
fmt.Println(parsedMessage) // your message
Uwaga
Jeśli komunikat jest bardziej zaawansowany niż ciąg, wtedy parsedMessage powinna mieć strukturę, która odpowiada temu, na co queueMessage wskazuje.
Wyzwalanie komunikatu
Aby przetestować aplikację, możesz użyć Eksplorator usługi Azure Storage. W okienku po prawej stronie narzędzia wybierz przycisk Dodaj komunikat , aby utworzyć komunikat w kolejce.
Jeśli masz aplikację usługi Functions i jest ona uruchomiona w tym momencie, spowoduje to wyzwolenie powiązania i wywołanie kodu.