rychlý start: použití jazyka Java k vytvoření aplikace zobrazující GitHub počet hvězdiček pomocí Azure Functions a služby signalizace

Služba signalizace Azure umožňuje snadno přidat do aplikace funkce v reálném čase a Azure Functions je platforma bez serveru, která umožňuje spuštění kódu bez nutnosti spravovat infrastrukturu. V tomto rychlém startu se dozvíte, jak používat službu Signal and Azure Functions k vytvoření aplikace bez serveru s jazykem Java pro vysílání zpráv klientům.

Poznámka

Všechny kódy, které jsou uvedené v článku, můžete získat z GitHub

Požadavky

  • editor kódu, například Visual Studio Code

  • Účet Azure s aktivním předplatným. Vytvořte si účet zdarma.

  • Azure Functions Core Tools. Slouží ke spouštění aplikací Azure Functions místně.

    Poznámka

    Požadované vazby služby signalizace v jazyce Java se podporují jenom v nástrojích Azure Function Core verze 2.4.419 (hostitel verze 2.0.12332) nebo vyšší.

    Poznámka

    Pro instalaci rozšíření Azure Functions Core Tools vyžaduje, aby byl .NET Core SDK nainstalovaný. K sestavování aplikací funkcí Azure v JavaScriptu však není potřeba žádná znalost architektury .NET.

  • Java Developer Kit, verze 11

  • Apache Maven verze 3.0 nebo novější

Poznámka

Toto Rychlé zprovoznění je možné spustit v systémech macOS, Windows nebo Linux.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Přihlaste se k Azure.

Přihlaste se k webu Azure Portal na adrese https://portal.azure.com/ pomocí svého účtu Azure.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Vytvoření instance služby Azure SignalR Service

Vaše aplikace se připojí k instanci služby SignalR Service v Azure.

  1. Vyberte tlačítko Nový v levém horním rohu portálu Azure Portal. Do vyhledávacího pole na obrazovce Nový zadejte SignalR Service a stiskněte klávesu Enter.

    Snímek obrazovky ukazuje hledání služby signalizace v Azure Portal.

  2. Ve výsledcích hledání vyberte SignalR Service a pak vyberte Vytvořit.

  3. Zadejte následující nastavení.

    Nastavení Navrhovaná hodnota Popis
    Název prostředku Globálně jedinečný název Název, který identifikuje novou instanci služby SignalR Service. Platné znaky jsou a-z, 0-9 a -.
    Předplatné Vaše předplatné Předplatné, ve kterém se nová instance služby SignalR Service vytvoří.
    Skupina prostředků myResourceGroup Název nové skupiny prostředků, ve které se má instance služby SignalR Service vytvořit.
    Umístění USA – západ Vyberte oblast , která je blízko vás.
    Cenová úroveň Free Vyzkoušejte si službu Azure SignalR Service zdarma.
    Počet jednotek Neuvedeno Počet jednotek určuje, kolik připojení může instance služby SignalR Service přijmout. To lze nakonfigurovat jen na úrovni Standard.
    Režim služby Bez serveru Pro použití s Azure Functions nebo REST API.

    Snímek obrazovky znázorňující kartu základy signálu s hodnotami.

  4. Pokud chcete začít nasazovat instanci služby SignalR Service, vyberte Vytvořit.

  5. Po nasazení instance ho otevřete na portálu a najděte jeho stránku nastavení. Nastavte režim služby na možnost bez serveru jenom v případě, že používáte službu Azure Signal service prostřednictvím Azure Functions vazby nebo REST API. V opačném případě je ponechte v klasickém nebo výchozím nastavení .

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Konfigurace a spuštění aplikace funkcí Azure

  1. Ujistěte se, že máte nástroje Azure Function Core, Java (verze 11 v ukázce) a Maven nainstalované.

    mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=11
    

    Maven vás vyzve k zadání hodnot potřebných k dokončení generování projektu. Můžete zadat následující hodnoty.

    Výzva Hodnota Popis
    groupId com.signalr Hodnota, která jednoznačně identifikuje váš projekt napříč všemi projekty, podle pravidel pro pojmenovávání balíčků pro Java.
    artifactId java Hodnota, která představuje název jar bez čísla verze.
    znění 1.0-SNAPSHOT Vyberte výchozí hodnotu.
    balíček com.signalr Hodnota, která je balíčkem Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu.
  2. Po inicializaci projektu. Přejít do složky src/main/java/com/signalr a zkopírovat následující kódy do Function.java

    package com.signalr;
    
    import com.google.gson.Gson;
    import com.microsoft.azure.functions.ExecutionContext;
    import com.microsoft.azure.functions.HttpMethod;
    import com.microsoft.azure.functions.HttpRequestMessage;
    import com.microsoft.azure.functions.HttpResponseMessage;
    import com.microsoft.azure.functions.HttpStatus;
    import com.microsoft.azure.functions.annotation.AuthorizationLevel;
    import com.microsoft.azure.functions.annotation.FunctionName;
    import com.microsoft.azure.functions.annotation.HttpTrigger;
    import com.microsoft.azure.functions.annotation.TimerTrigger;
    import com.microsoft.azure.functions.signalr.*;
    import com.microsoft.azure.functions.signalr.annotation.*;
    
    import org.apache.commons.io.IOUtils;
    
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.net.http.HttpResponse.BodyHandlers;
    import java.nio.charset.StandardCharsets;
    import java.util.Optional;
    
    public class Function {
        @FunctionName("index")
        public HttpResponseMessage run(
                @HttpTrigger(
                    name = "req",
                    methods = {HttpMethod.GET},
                    authLevel = AuthorizationLevel.ANONYMOUS)HttpRequestMessage<Optional<String>> request,
                final ExecutionContext context) throws IOException {
    
            InputStream inputStream = getClass().getClassLoader().getResourceAsStream("content/index.html");
            String text = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name());
            return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "text/html").body(text).build();
        }
    
        @FunctionName("negotiate")
        public SignalRConnectionInfo negotiate(
                @HttpTrigger(
                    name = "req",
                    methods = { HttpMethod.POST },
                    authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
                @SignalRConnectionInfoInput(
                    name = "connectionInfo",
                    hubName = "serverless") SignalRConnectionInfo connectionInfo) {
    
            return connectionInfo;
        }
    
        @FunctionName("broadcast")
        @SignalROutput(name = "$return", hubName = "serverless")
        public SignalRMessage broadcast(
            @TimerTrigger(name = "timeTrigger", schedule = "*/5 * * * * *") String timerInfo) throws IOException, InterruptedException {
    
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest req = HttpRequest.newBuilder().uri(URI.create("https://api.github.com/repos/azure/azure-signalr")).header("User-Agent", "serverless").build();
            HttpResponse<String> res = client.send(req, BodyHandlers.ofString());
            Gson gson = new Gson();
            GitResult result = gson.fromJson(res.body(), GitResult.class);
            return new SignalRMessage("newMessage", "Current star count of https://github.com/Azure/azure-signalr is:".concat(result.stargazers_count));
        }
    
        class GitResult {
            public String stargazers_count;
        }
    }
    
  3. Je potřeba přidat některé závislosti. Proto otevřete pom.xml a přidejte některou závislost, která se používá v kódech.

    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library-signalr</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.7</version>
    </dependency>
    
  4. Rozhraní klienta této ukázky je webová stránka. Při čtení obsahu HTML z content/index.html funkce ve index funkci se vytvoří nový soubor content/index.html v resources adresáři. Strom adresářů by měl vypadat takto.

    FunctionsProject
     | - src
     | | - main
     | | | - java
     | | | | - com
     | | | | | - signalr 
     | | | | | | - Function.java
     | | | - resources
     | | | | - content
     | | | | | - index.html
     | - pom.xml
     | - host.json
     | - local.settings.json
    

    Otevřete index.html a zkopírujte následující obsah.

    <html>
    
    <body>
      <h1>Azure SignalR Serverless Sample</h1>
      <div id="messages"></div>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js"></script>
      <script>
        let messages = document.querySelector('#messages');
        const apiBaseUrl = window.location.origin;
        const connection = new signalR.HubConnectionBuilder()
            .withUrl(apiBaseUrl + '/api')
            .configureLogging(signalR.LogLevel.Information)
            .build();
          connection.on('newMessage', (message) => {
            document.getElementById("messages").innerHTML = message;
          });
    
          connection.start()
            .catch(console.error);
      </script>
    </body>
    
    </html>
    
  5. Teď je skoro hotové. Posledním krokem je nastavení připojovacího řetězce pro službu signalizace na nastavení funkce Azure.

    1. V prohlížeči, ve kterém máte otevřený Azure Portal, si ověřte, že se úspěšně vytvořila instance služby SignalR Service, kterou jste nasadili dříve. Vyhledejte její název pomocí vyhledávacího pole v horní části stránky portálu. Instanci vyberte a otevřete.

      Vyhledání instance služby SignalR

    2. Výběrem možnosti Klíče zobrazte připojovací řetězce instance služby SignalR.

      Snímek obrazovky, který zvýrazní primární připojovací řetězec.

    3. Zkopírujte primární připojovací řetězec. A spusťte následující příkaz.

      func settings add AzureSignalRConnectionString "<signalr-connection-string>"
      # Also we need to set AzureWebJobsStorage as Azure Function's requirement
      func settings add AzureWebJobsStorage "UseDevelopmentStorage=true"
      
  6. Spusťte funkci Azure Functions v místním prostředí:

    mvn clean package
    mvn azure-functions:run
    

    Funkce Azure Functions se spouští místně. Pomocí prohlížeče můžete navštívit http://localhost:7071/api/index a zobrazit aktuální počet hvězdiček. a pokud v GitHub hvězdičku nebo nestarou, obdržíte každých pár sekund aktualizaci počtu hvězdiček.

    Poznámka

    vazba signálu vyžaduje Azure Storage, ale můžete použít emulátor místního úložiště, pokud je funkce spuštěná místně. pokud máte nějakou chybu, například There was an error performing a read operation on the Blob Storage Secret Repository. Please ensure the 'AzureWebJobsStorage' connection string is valid. potřebujete stáhnout a povolit Storage Emulator

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Vyčištění prostředků

Pokud nebudete tuto aplikace nadále používat, odstraňte na základě následujícího postupu všechny prostředky vytvořené podle tohoto rychlého startu, aby se vám neúčtovaly žádné poplatky:

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků a pak vyberte skupinu prostředků, kterou jste vytvořili. Případně můžete použít vyhledávací pole a skupinu prostředků vyhledat podle jejího názvu.

  2. V okně, které se otevře, vyberte příslušnou skupinu prostředků a pak klikněte na Odstranit skupinu prostředků.

  3. V novém okně zadejte název skupiny prostředků, kterou chcete odstranit, a pak klikněte na Odstranit.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Další kroky

V tomto rychlém startu jste vytvořili a spustili aplikaci bez serveru v reálném čase v místním prostředí. Přečtěte si další informace o použití vazeb služby Signal pro Azure Functions. V dalším kroku se dozvíte, jak obousměrnou komunikaci mezi klienty a službou Azure Functions s využitím služby Signal.