Wyzwalacz kolejki

Ukończone

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:

  1. Zainstaluj emulator. Wyszukaj aplikację Azurite w programie Visual Studio Code lub pobierz rozszerzenie Azurite.

  2. 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.

  3. Pobierz Eksplorator usługi Azure Storage. Następnie otwórz aplikację i zobaczysz następujące wskazanie, że emulator działa:

    Zrzut ekranu przedstawiający emulator w Eksplorator usługi Azure Storage.

  4. 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ę.

  5. 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.

Zrzut ekranu przedstawiający przycisk dodawania komunikatu 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.