Quickstart: Java gebruiken om een app te maken met GitHub aantal sterren met Azure Functions en SignalR Service
Met Azure SignalR Service kunt u eenvoudig realtime functionaliteit toevoegen aan uw toepassing en Azure Functions is een serverloos platform waarmee u uw code kunt uitvoeren zonder een infrastructuur te beheren. In deze quickstart leert u hoe u SignalR Service en Azure Functions een serverloze toepassing met Java kunt bouwen om berichten naar clients uit te zenden.
Notitie
U kunt alle codes die in het artikel worden vermeld, op GitHub
Vereisten
Een code-editor zoals Visual Studio Code
Een Azure-account met een actief abonnement. Gratis een account maken
Azure Functions Core Tools. Wordt gebruikt om Azure Function-apps lokaal uit te voeren.
Notitie
De vereiste SignalR Service-bindingen in Java worden alleen ondersteund in Azure Function Core Tools versie 2.4.419 (hostversie 2.0.12332) of hoger.
Notitie
.NET Core SDK moet zijn geïnstalleerd voor Azure Functions Core Tools om de extensies te installeren. Er is echter geen kennis van .NET vereist om JavaScript Azure-functie-apps te bouwen.
Java Developer Kit,versie 11
Apache Maven, versie 3.0 of hoger
Notitie
Deze quickstart kan worden uitgevoerd op macOS, Windows of Linux.
Ondervindt u problemen? Probeer de gids voor probleemoplossing of laat het ons weten.
Meld u aan bij Azure.
Meld u met uw Azure-account aan bij Azure Portal op https://portal.azure.com/.
Ondervindt u problemen? Probeer de gids voor probleemoplossing of laat het ons weten.
Een exemplaar van de Azure SignalR Service maken
Uw toepassing maakt verbinding met een SignalR-Service-exemplaar in Azure.
Selecteer de knop Nieuw in de linkerbovenhoek van Azure Portal. Typ in het scherm Nieuw SignalR Service in het zoekvak in en druk op Enter.

Selecteer SignalR Service in de zoekresultaten en selecteer Maken.
Voer de volgende instellingen in.
Instelling Voorgestelde waarde Beschrijving Resourcenaam Wereldwijd unieke naam Naam ter identificatie van uw nieuwe SignalR Service-exemplaar. Geldige tekens zijn a-z,0-9en-.Abonnement Uw abonnement Het abonnement waarin dit nieuwe SignalR Service-exemplaar is gemaakt. Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin het SignalR Service-exemplaar moet worden gemaakt. Locatie VS - west Kies een regio bij u in de buurt. Prijscategorie Gratis Probeer Azure SignalR Service gratis uit. Aantal eenheden Niet van toepassing Het aantal eenheden geeft aan hoeveel verbindingen uw SignalR Service-exemplaar kan accepteren. Dit kan alleen worden geconfigureerd in de Standard-laag. Servicemodus Serverloos Voor gebruik met Azure Functions of REST-API. 
Selecteer Maken om te beginnen met het implementeren van het SignalR-Service-exemplaar.
Zodra het exemplaar is geïmplementeerd, opent u dit in de portal en zoekt u de bijbehorende Instellingen-pagina. Wijzig de instelling van Servicemodus alleen in Serverloos als u de Azure SignalR-service gebruikt via Azure Functions-binding of de REST-API. Laat de modus anders op Klassiek of Standaard staan.
Ondervindt u problemen? Probeer de gids voor probleemoplossing of laat het ons weten.
De Azure-functie-app configureren en uitvoeren
Zorg ervoor dat Azure Function Core Tools, java (versie 11 in het voorbeeld) en maven zijn geïnstalleerd.
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=11U wordt door Maven gevraagd om de waarden die nodig zijn om het project te kunnen genereren. U kunt de volgende waarden verstrekken.
Prompt Waarde Beschrijving groupId com.signalrEen waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java. artifactId javaEen waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer. version 1.0-SNAPSHOTKies de standaardwaarde. package com.signalrEen waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard. Nadat u een project hebt initialiseren. Ga naar de map
src/main/java/com/signalren kopieer de volgende codes naarFunction.javapackage 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; } }Sommige afhankelijkheden moeten worden toegevoegd. Open de en
pom.xmlvoeg een afhankelijkheid toe die wordt gebruikt in codes.<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>De clientinterface van dit voorbeeld is een webpagina. Als we HTML-inhoud uit
content/index.htmlinindexfunctie lezen, maakt u een nieuw bestandcontent/index.htmlin de mapresources. Uw mapstructuur moet er als deze uitzien.FunctionsProject | - src | | - main | | | - java | | | | - com | | | | | - signalr | | | | | | - Function.java | | | - resources | | | | - content | | | | | - index.html | - pom.xml | - host.json | - local.settings.jsonOpen de
index.htmlen kopieer de volgende inhoud.<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>Het is nu bijna klaar. De laatste stap is het instellen van een connection string van de SignalR Service op Azure Function-instellingen.
Controleer in de browser waarin de Azure-portal is geopend, of het service-exemplaar van SignalR dat u eerder hebt geïmplementeerd, is gemaakt. Hiervoor typt u de naam van het exemplaar in het zoekvak boven in de portal. Selecteer het exemplaar om het te openen.

Selecteer Sleutels om de verbindingsreeksen voor het service-exemplaar van SignalR weer te geven.

Kopieer de primaire connection string. Voer de onderstaande opdracht uit.
func settings add AzureSignalRConnectionString "<signalr-connection-string>" # Also we need to set AzureWebJobsStorage as Azure Function's requirement func settings add AzureWebJobsStorage "UseDevelopmentStorage=true"
Voer de Azure-functie lokaal uit:
mvn clean package mvn azure-functions:runNadat De Azure-functie lokaal is uitgevoerd. Gebruik uw browser om naar te
http://localhost:7071/api/indexgaan en u kunt het huidige aantal sterren zien. En als u in de GitHub een ster laat zien, wordt het aantal sterren elke paar seconden vernieuwd.Notitie
SignalR-binding Azure Storage, maar u kunt de lokale opslagemulator gebruiken wanneer de functie lokaal wordt uitgevoerd. Als er een foutbericht wordt
There was an error performing a read operation on the Blob Storage Secret Repository. Please ensure the 'AzureWebJobsStorage' connection string is valid.weergegeven, zoals U moet deze downloaden en inschakelen Storage Emulator
Ondervindt u problemen? Probeer de gids voor probleemoplossing of laat het ons weten.
Resources opschonen
Als u deze app niet verder gaat gebruiken, kunt u alle resources verwijderen die door deze Quick Start zijn aangemaakt door de onderstaande stappen te volgen, zodat u geen kosten in rekening worden gebracht:
Selecteer in Azure Portal Resourcegroepen aan de linkerkant en selecteer vervolgens de resourcegroep die u hebt gemaakt. U kunt ook het zoekvak gebruiken om de resourcegroep op de naam te zoeken.
Selecteer in het venster dat wordt geopend, de resourcegroep en klik op Resourcegroep verwijderen.
Voer in het nieuwe venster de naam in van de resourcegroep die u wilt verwijderen en klik vervolgens op Verwijderen.
Ondervindt u problemen? Probeer de gids voor probleemoplossing of laat het ons weten.
Volgende stappen
In deze quickstart hebt u een serverloze realtimetoepassing lokaal gebouwd en uitgevoerd. Meer informatie over het gebruik SignalR Service bindingen voor Azure Functions. Hierna leert u meer over bi-directionele communicatie tussen clients en Azure Function met SignalR Service.