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

Ve výsledcích hledání vyberte SignalR Service a pak vyberte Vytvořit.
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-9a-.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. 
Pokud chcete začít nasazovat instanci služby SignalR Service, vyberte Vytvořit.
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
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=11Maven 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.signalrHodnota, která jednoznačně identifikuje váš projekt napříč všemi projekty, podle pravidel pro pojmenovávání balíčků pro Java. artifactId javaHodnota, která představuje název jar bez čísla verze. znění 1.0-SNAPSHOTVyberte výchozí hodnotu. balíček com.signalrHodnota, která je balíčkem Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu. Po inicializaci projektu. Přejít do složky
src/main/java/com/signalra zkopírovat následující kódy doFunction.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; } }Je potřeba přidat některé závislosti. Proto otevřete
pom.xmla 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>Rozhraní klienta této ukázky je webová stránka. Při čtení obsahu HTML z
content/index.htmlfunkce veindexfunkci se vytvoří nový souborcontent/index.htmlvresourcesadresář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.jsonOtevřete
index.htmla 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>Teď je skoro hotové. Posledním krokem je nastavení připojovacího řetězce pro službu signalizace na nastavení funkce Azure.
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.

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

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"
Spusťte funkci Azure Functions v místním prostředí:
mvn clean package mvn azure-functions:runFunkce Azure Functions se spouští místně. Pomocí prohlížeče můžete navštívit
http://localhost:7071/api/indexa 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:
Ú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.
V okně, které se otevře, vyberte příslušnou skupinu prostředků a pak klikněte na Odstranit skupinu prostředků.
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.