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, gdy jest to dobry czas.
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 platformy Azure mogła korzystać z komunikatu z kolejki komunikatów, 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 w kolejce. W elemecie bindings
określ te właściwości we wpisie:
Właściwości | 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, AzureWebJobsStorage
wartość jest wartością parametry połączenia.
Nie potrzebujesz ściśle powiązania podczas korzystania z komunikatu z kolejki. Jeśli jednak chcesz zapisać w kolejce, 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.
Opracowywanie w środowisku lokalnym
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ę kolejki na palecie poleceń.
Uruchomienie tego polecenia uruchamia odbiornik o nazwie Eksplorator usługi Azure Storage, na którym może pobrać inna aplikacja. 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 w ramach 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 local.settings.json, znajdź
AzureWebJobsStorage
element i nadaj mu wartość"UseDevelopmentStorage=true"
.Uwaga
Pamiętaj, aby ustawić tę właściwość inaczej podczas przechodzenia do chmury. Powinna wskazywać rzeczywisty zasób na platformie Azure w środowisku produkcyjnym.
Kompilowanie funkcji
Masz teraz skonfigurowany emulator lokalny i ma na nim kolejkę. Projekt został również skonfigurowany tak, aby wskazywał emulator lokalny. Teraz musisz utworzyć funkcję do obsługi wyzwalacza kolejki.
Tworzenie punktu końcowego funkcji
Możesz 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 ją, gdy pojawi się nowy komunikat.
Element queueName
jednoznacznie identyfikuje kolejkę, z którą korzystasz. Niezależnie od tego, co wprowadzisz tutaj, musi być zgodne z tym, co wywołujesz kolejkę w emulatorze lub co później wywołujesz 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 w katalogu 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 zdekodowanym żądaniu można pobrać komunikat kolejki z żądania we Data
właściwości . Należy również odwołać się do komunikatu name
według wartości właściwości skonfigurowanej 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, która przyjmuje Unmarshal()
dwa parametry: komunikat, który ma zostać przeanalizowany, oraz zmienną do umieszczania analizowanego komunikatu. 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, parsedMessage
musi mieć strukturę zgodną z queueMessage
kształtem wskazującym.
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.