Azure WebPubSub-clientbibliotheek voor Java

Notitie

Meer informatie over de termen die hier worden gebruikt, worden beschreven in het artikel over belangrijke concepten .

De SDK aan de clientzijde wil de werkstroom van ontwikkelaars versnellen; meer specifiek,

  • vereenvoudigt het beheren van clientverbindingen
  • vereenvoudigt het verzenden van berichten tussen clients
  • automatisch opnieuw proberen na onbedoelde uitval van clientverbinding
  • betrouwbare levering van berichten in getal en in volgorde na het herstellen van verbinding druppels

Zoals in het diagram wordt weergegeven, maken uw clients WebSocket-verbindingen met uw Web PubSub-resource.

Schermopname van clients die een WebSocket-verbinding tot stand brengen met een Web PubSub-resource

Belangrijk

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden.

Een verbindingsreeks bevat de autorisatiegegevens die nodig zijn voor uw toepassing voor toegang tot de Azure Web PubSub-service. De toegangssleutel in de verbindingsreeks is vergelijkbaar met een hoofdwachtwoord voor uw service. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbinding te beveiligen.WebPubSubServiceClient

Vermijd het distribueren van toegangssleutels naar andere gebruikers, het coderen ervan of het opslaan van ze ergens in tekst zonder opmaak die toegankelijk is voor anderen. Draai uw sleutels als u denkt dat ze mogelijk zijn aangetast.

Aan de slag

Vereisten

  • Java Development Kit (JDK) met versie 8 of hoger
  • Azure-abonnement
  • Een bestaand Web PubSub-exemplaar

Het pakket toevoegen aan uw product

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-webpubsub-client</artifactId>
    <version>1.0.0-beta.1</version>
</dependency>

De client verifiëren

Een client maakt gebruik van een Client Access URL client om verbinding te maken en te verifiëren met de service. De URL volgt een patroon van wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. Er zijn meerdere manieren om een Client Access URL. Als snel aan de slag kunt u kopiëren en plakken vanuit Azure Portal. Voor productie hebt u meestal een onderhandelingsserver nodig om de URL te genereren. Zie details.

Gebruiken Client Access URL vanuit Azure Portal

Als snel aan de slag kunt u naar Azure Portal gaan en de URL voor clienttoegang kopiëren vanaf de blade Sleutels.

Schermopname die laat zien hoe u clienttoegangs-URL op Azure Portal kunt ophalen

Zoals in het diagram wordt weergegeven, krijgt de client toestemming om berichten naar specifieke groepen te verzenden en lid te worden van specifieke groepen. Zie machtigingen voor meer informatie over clientmachtigingen .

WebPubSubClient client = new WebPubSubClientBuilder()
    .clientAccessUrl("<client-access-url>")
    .buildClient();

Onderhandelingsserver gebruiken om te genereren Client Access URL

In productie haalt een client meestal de Client Access URL van een onderhandelingsserver op. De server bevat de connection string en genereert de Client Access URL via WebPubSubServiceClient. Als voorbeeld laat het codefragment zien hoe u het Client Access URL binnen één proces genereert.

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbinding te beveiligen.WebPubSubServiceClient

// WebPubSubServiceAsyncClient is from com.azure:azure-messaging-webpubsub
// create WebPubSub service client
WebPubSubServiceAsyncClient serverClient = new WebPubSubServiceClientBuilder()
    .connectionString("<connection-string>")
    .hub("<hub>>")
    .buildAsyncClient();

// wrap WebPubSubServiceAsyncClient.getClientAccessToken as WebPubSubClientCredential
WebPubSubClientCredential clientCredential = new WebPubSubClientCredential(Mono.defer(() ->
    serverClient.getClientAccessToken(new GetClientAccessTokenOptions()
            .setUserId("<user-name>")
            .addRole("webpubsub.joinLeaveGroup")
            .addRole("webpubsub.sendToGroup"))
        .map(WebPubSubClientAccessToken::getUrl)));

// create WebPubSub client
WebPubSubClient client = new WebPubSubClientBuilder()
    .credential(clientCredential)
    .buildClient();

Functies om onderscheid te maken WebPubSubClient en WebPubSubServiceClient.

Klassenaam WebPubSubClient WebPubSubServiceClient
Pakketnaam azure-messaging-webpubsub-client azure-messaging-webpubsub
Functies Wordt gebruikt aan de clientzijde. Publiceer berichten en abonneer u op berichten. Wordt gebruikt aan de serverzijde. Clients genereren Client Access URL en beheren.

Voorbeelden

Berichten van de server en groepen gebruiken

Een client kan callbacks toevoegen om berichten van de server en groepen te gebruiken. Houd er rekening mee dat clients alleen groepsberichten kunnen ontvangen die eraan zijn toegevoegd.

client.addOnGroupMessageEventHandler(event -> {
    System.out.println("Received group message from " + event.getFromUserId() + ": "
        + event.getData().toString());
});
client.addOnServerMessageEventHandler(event -> {
    System.out.println("Received server message: "
        + event.getData().toString());
});

Callbacks voor connected, disconnecteden stopped gebeurtenissen toevoegen

Wanneer een clientverbinding is verbonden met de service, wordt de connected gebeurtenis geactiveerd.

Wanneer een clientverbinding is verbroken en niet kan worden hersteld, wordt de disconnected gebeurtenis geactiveerd.

Wanneer een client is gestopt, wat betekent dat de clientverbinding is verbroken en de client stopt met opnieuw verbinding maken, wordt de stopped gebeurtenis geactiveerd. Dit gebeurt meestal nadat de client.StopAsync() aangeroepen of uitgeschakelde AutoReconnectis. Als u de client opnieuw wilt starten, kunt u de client.StartAsync() gebeurtenis aanroepenStopped.

client.addOnConnectedEventHandler(event -> {
    System.out.println("Connection is connected: " + event.getConnectionId());
});
client.addOnDisconnectedEventHandler(event -> {
    System.out.println("Connection is disconnected");
});
client.addOnStoppedEventHandler(event -> {
    System.out.println("Client is stopped");
});

Bewerking en nieuwe poging

Standaard heeft de bewerking, zoals client.joinGroup(), client.leaveGroup(), client.sendToGroup(), drie client.sendEvent() reties. U kunt dit gebruiken WebPubSubClientBuilder.retryOptions() om te wijzigen. Als alle nieuwe pogingen zijn mislukt, wordt er een fout gegenereerd. U kunt het opnieuw proberen door hetzelfde ackId door te geven als eerdere nieuwe pogingen, zodat de service kan helpen om de bewerking met dezelfde ackIdte ontdubbelen.

try {
    client.joinGroup("testGroup");
} catch (SendMessageFailedException e) {
    if (e.getAckId() != null) {
        client.joinGroup("testGroup", e.getAckId());
    }
}

Probleemoplossing

Logboeken inschakelen

U kunt de volgende omgevingsvariabele instellen om de logboeken voor foutopsporing op te halen bij het gebruik van deze bibliotheek.

export AZURE_LOG_LEVEL=verbose

Voor meer gedetailleerde instructies over het inschakelen van logboeken, kunt u de @azure/logger pakketdocumenten bekijken.

Live Trace

Gebruik het hulpprogramma Live Trace vanuit de Azure-portal om live berichtenverkeer te inspecteren via uw Web PubSub-resource.