Rövid útmutató: A Java használata GitHub-csillagszámokat megjelenítő alkalmazás létrehozásához az Azure Functions és a SignalR Szolgáltatás használatával
Ebben a cikkben az Azure SignalR Service, az Azure Functions és a Java használatával fog létrehozni egy kiszolgáló nélküli alkalmazást, amely üzeneteket küld az ügyfeleknek.
Előfeltételek
Kódszerkesztő, például Visual Studio Code
An Azure account with an active subscription. Ha még nem rendelkezik fiókkal, hozzon létre ingyenes fiókot.
Azure Functions Core Tools. Az Azure-függvényalkalmazások helyi futtatására szolgál.
- A Java-ban szükséges SignalR-szolgáltatáskötések csak az Azure Function Core Tools 2.4.419-es (2.0.12332-es gazdagépverzió) vagy újabb verzióiban támogatottak.
- A bővítmények telepítéséhez az Azure Functions Core Toolshoz telepítve kell lennie a .NET Core SDK-nak . A Java Azure-függvényalkalmazások létrehozásához azonban nem szükséges a .NET ismerete.
Java Developer Kit, 11-es verzió
Az Apache Maven 3.0-s vagy újabb verziója.
Ez a rövid útmutató macOS, Windows vagy Linux rendszeren is futtatható.
Azure SignalR Service-példány létrehozása
Ebben a szakaszban egy alapszintű Azure SignalR-példányt hoz létre az alkalmazáshoz. Az alábbi lépések az Azure Portal használatával hoznak létre új példányt, de használhatja az Azure CLI-t is. További információ: az signalr create command in the Azure SignalR Service CLI Reference.
- Jelentkezzen be az Azure Portalra.
- A lap bal felső részén válassza az + Erőforrás létrehozása lehetőséget.
- Az Erőforrás létrehozása lap Search szolgáltatás és piactér szövegmezőjében adja meg a signalr kifejezést, majd válassza ki a SignalR szolgáltatást a listából.
- A SignalR szolgáltatás oldalán válassza a Létrehozás lehetőséget.
- Az Alapok lapon adja meg az új SignalR-szolgáltatáspéldány alapvető adatait. Írja be a következő értékeket:
Mező | Ajánlott érték | Leírás |
---|---|---|
Subscription | Válassza ki az előfizetését | Válassza ki azt az előfizetést, amelyet egy új SignalR-szolgáltatáspéldány létrehozásához szeretne használni. |
Erőforráscsoport | SignalRTestResources nevű erőforráscsoport létrehozása | Válasszon ki vagy hozzon létre egy erőforráscsoportot a SignalR-erőforráshoz. Hasznos, ha egy új erőforráscsoportot hoz létre ehhez az oktatóanyaghoz ahelyett, hogy meglévő erőforráscsoportot használ. Ha az oktatóanyag elvégzése után szeretné felszabadítani az erőforrásokat, törölje az erőforráscsoportot. Az erőforráscsoport törlése a csoporthoz tartozó összes erőforrást is törli. This action can't be undone. Mielőtt töröl egy erőforráscsoportot, győződjön meg arról, hogy nem tartalmazza a megtartani kívánt erőforrásokat. További információk: Erőforráscsoportok használata az Azure-erőforrások kezeléséhez. |
Erőforrás neve | testsignalr | Írja be a SignalR-erőforráshoz használandó egyedi erőforrásnevet. Ha a testsignalr már szerepel a régióban, adjon hozzá egy számjegyet vagy karaktert, amíg a név egyedi nem lesz. A névnek 1–63 karakter hosszúságú sztringnek kell lennie, és csak számokat, betűket és kötőjelet ( - ) tartalmazhat. A név nem kezdődhet és nem végződhet kötőjeljellel, és az egymást követő kötőjelkarakterek érvénytelenek. |
Region | Régió kiválasztása | Válassza ki az új SignalR-szolgáltatáspéldány megfelelő régióját. Az Azure SignalR szolgáltatás jelenleg nem érhető el minden régióban. További információ: Azure SignalR Service-régió rendelkezésre állása |
Tarifacsomag | Válassza a Módosítás lehetőséget, majd válassza az Ingyenes (Csak dev/Test) lehetőséget. Válassza a Kiválasztás lehetőséget a tarifacsomag kiválasztásának megerősítéséhez. | Az Azure SignalR szolgáltatás három tarifacsomagot tartalmaz: ingyenes, standard és prémium. Az oktatóanyagok az ingyenes szintet használják, hacsak az előfeltételek másként nem rendelkeznek. A szintek és a díjszabás közötti funkcióbeli különbségekről további információt az Azure SignalR Service díjszabásában talál . |
Szolgáltatás mód | Válassza ki a megfelelő szolgáltatási módot | Az Alapértelmezett beállítást akkor használja, ha a SignalR hub logikáját üzemelteti a webalkalmazásokban, és proxyként használja a SignalR szolgáltatást. Kiszolgáló nélküli technológiát, például az Azure Functionst használva üzemeltetheti a SignalR hub logikáját. A klasszikus mód csak a visszamenőleges kompatibilitást szolgálja, ezért nem ajánlott használni. További információ: Szolgáltatás mód az Azure SignalR Service-ben. |
A SignalR-oktatóanyagok Hálózatkezelés és Címkék lapján nem kell módosítania a beállításokat.
- Válassza az Alapismeretek lap alján található Véleményezés + létrehozás gombot.
- A Véleményezés + létrehozás lapon tekintse át az értékeket, majd válassza a Létrehozás lehetőséget. Az üzembe helyezés végrehajtása néhány percet vesz igénybe.
- Amikor az üzembe helyezés befejeződött, válassza az Erőforrás megnyitása gombot.
- A SignalR erőforráslapján válassza a bal oldali menü kulcsait a Gépház alatt.
- Másolja ki az elsődleges kulcshoz tartozó Csatlakozás ion sztringet. Erre a kapcsolati sztring van szüksége az alkalmazás konfigurálásához az oktatóanyag későbbi részében.
Az Azure-függvényalkalmazás konfigurálása és futtatása
Győződjön meg arról, hogy telepítve vannak az Azure Function Core Tools, a Java (a mintában a 11-es verzió) és a Maven.
A projekt inicializálása a Maven használatával:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=11
A Maven a projekt létrehozásához szükséges értékeket kéri. Adja meg a következő értékeket:
Adatkérés Value Description groupId com.signalr
Olyan érték, amely egyedileg azonosítja a projektet az összes projektben, a Java csomagelnevezési szabályait követve. artifactId java
Olyan érték, amely a jar neve, verziószám nélkül. Változat 1.0-SNAPSHOT
Válassza ki az alapértelmezett értéket. Csomag com.signalr
Egy érték, amely a létrehozott függvénykód Java-csomagja. Használja az alapértelmezettet. Nyissa meg a mappát
src/main/java/com/signalr
, és másolja a következő kódot a Function.java fájlba: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 { private static String Etag = ""; private static String StarCount; @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").header("If-None-Match", Etag).build(); HttpResponse<String> res = client.send(req, BodyHandlers.ofString()); if (res.headers().firstValue("Etag").isPresent()) { Etag = res.headers().firstValue("Etag").get(); } if (res.statusCode() == 200) { Gson gson = new Gson(); GitResult result = gson.fromJson(res.body(), GitResult.class); StarCount = result.stargazers_count; } return new SignalRMessage("newMessage", "Current start count of https://github.com/Azure/azure-signalr is:".concat(StarCount)); } class GitResult { public String stargazers_count; } }
Néhány függőséget hozzá kell adni. Nyissa meg a pom.xml fájlt , és adja hozzá a kódban használt alábbi függőségeket:
<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>
A minta ügyfélfelülete egy weblap. A függvény content/index.html
index
HTML-tartalmát olvassuk, majd létrehozunk egy új fájlt content/index.html aresources
könyvtárban. A címtárfának így kell kinéznie:| - src | | - main | | | - java | | | | - com | | | | | - signalr | | | | | | - Function.java | | | - resources | | | | - content | | | | | - index.html | - pom.xml | - host.json | - local.settings.json
Nyissa meg az index.html fájlt , és másolja a következő tartalmat:
<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>
Az Azure Functions használatához egy tárfiók szükséges. Telepítheti és futtathatja az Azure Storage Emulatort.
Már majdnem elkészült. Az utolsó lépés a SignalR szolgáltatás kapcsolati sztring beállítása azure-függvénybeállításokra.
Keresse meg a korábban üzembe helyezett Azure SignalR-példányt az Azure Portal keresőmezőjében . A megnyitáshoz válassza ki a példányt.
Válassza a Kulcsok elemet a SignalR-szolgáltatáspéldány kapcsolati sztringjeinek megtekintéséhez.
Másolja ki az elsődleges kapcsolati sztring, majd futtassa a következő parancsot:
func settings add AzureSignalRConnectionString "<signalr-connection-string>" # Also we need to set AzureWebJobsStorage as Azure Function's requirement func settings add AzureWebJobsStorage "UseDevelopmentStorage=true"
Futtassa az Azure-függvényt helyi nyelven:
mvn clean package mvn azure-functions:run
Miután az Azure-függvény helyileg fut, lépjen
http://localhost:7071/api/index
, és látni fogja az aktuális csillagszámot. Ha a GitHubon csillagot vagy "unstar" értéket ad meg, néhány másodpercenként frissül a csillagok száma.
Clean up resources
Ha nem használja tovább az alkalmazást, akkor a következő lépésekkel a mintaalkalmazás által létrehozott összes erőforrást törölheti a költségek elkerülése érdekében:
Az Azure Portalon válassza az Erőforráscsoportok lehetőséget a bal szélen, majd a létrehozott erőforráscsoport. Másik lehetőségként a keresőmezőben, név alapján is rákereshet az erőforráscsoportra.
Az ekkor megnyíló új ablakban válassza ki az erőforráscsoportot, és kattintson az Erőforráscsoport törlése elemre.
Az új ablakban írja be a törölni kívánt erőforráscsoport nevét, majd kattintson a Törlés elemre.
Problémákat tapasztal? Próbálja ki a hibaelhárítási útmutatót , vagy tudassa velünk.
Következő lépések
Ebben a rövid útmutatóban egy valós idejű kiszolgáló nélküli alkalmazást készített és futtatott a helyi gazdagépen. A következő lépésben megtudhatja, hogyan kommunikálhat kétirányúan az ügyfelek és az Azure-függvények között a SignalR Szolgáltatással.