Ontwikkelaarshandleiding voor Azure Service Bus JMS 2.0

Deze handleiding bevat gedetailleerde informatie waarmee u kunt communiceren met Azure Service Bus met behulp van de Java Message Service (JMS) 2.0 API.

Als java-ontwikkelaar kunt u de volgende artikelen lezen als u nog geen gebruik hebt gemaakt van Azure Service Bus.

Aan de slag Concepten

JMS-programmeermodel (Java Message Service)

Het programmeermodel van de Java Message Service-API wordt weergegeven in de volgende secties:

Notitie

De Azure Service Bus Premium-laag ondersteunt JMS 1.1 en JMS 2.0.

Azure Service Bus - Standard-laag biedt ondersteuning voor beperkte JMS 1.1-functionaliteit. Raadpleeg deze documentatie voor meer informatie.

JMS - Bouwstenen

De onderstaande bouwstenen zijn beschikbaar om te communiceren met de JMS-toepassing.

Notitie

De onderstaande handleiding is aangepast uit de Oracle Java EE 6-zelfstudie voor Java Message Service (JMS)

Het verwijzen naar deze zelfstudie wordt aanbevolen voor een beter begrip van de Java Message Service (JMS).

Verbinding maken ion factory

Het object connection factory wordt door de client gebruikt om verbinding te maken met de JMS-provider. De verbindingsfactory bevat een set verbindingsconfiguratieparameters die zijn gedefinieerd door de beheerder.

Elke verbindingsfactory is een exemplaar van ConnectionFactory, QueueConnectionFactoryof TopicConnectionFactory interface.

Om het maken van verbinding met Azure Service Bus te vereenvoudigen, worden deze interfaces geïmplementeerd via ServiceBusJmsConnectionFactoryrespectievelijk, ServiceBusJmsQueueConnectionFactoryof ServiceBusJmsTopicConnectionFactory respectievelijk.

Belangrijk

Java-toepassingen die gebruikmaken van de JMS 2.0-API, kunnen verbinding maken met Azure Service Bus met behulp van de verbindingsreeks of een voor het gebruik van TokenCredential door Microsoft Entra ondersteunde verificatie. Zorg er bij het gebruik van door Microsoft Entra ondersteunde verificatie voor dat u waar nodig rollen en machtigingen toewijst aan de identiteit.

Maak een door het systeem toegewezen beheerde identiteit in Azure en gebruik deze identiteit om een TokenCredential.

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

De Verbinding maken ion factory kan vervolgens worden geïnstantieerd met de onderstaande parameters.

  • Tokenreferentie: vertegenwoordigt een referentie die een OAuth-token kan leveren.
  • Host: de hostnaam van de naamruimte van de Azure Service Bus Premium-laag.
  • ServiceBusJms Verbinding maken ionFactory Instellingen eigenschapstas, die bevat
    • connectionIdleTimeoutMS- time-out voor inactiviteit in milliseconden.
    • traceFrames: booleaanse vlag voor het verzamelen van AMQP-traceringsframes voor foutopsporing.
    • andere configuratieparameters

De fabriek kan worden gemaakt zoals hier wordt weergegeven. De tokenreferenties en host zijn vereiste parameters, maar de andere eigenschappen zijn optioneel.

String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null); 

JMS-bestemming

Een bestemming is het object dat een client gebruikt om het doel op te geven van de berichten die de client produceert en de bron van de berichten die deze verbruikt.

Bestemmingen worden toegewezen aan entiteiten in Azure Service Bus - wachtrijen (punt-naar-puntscenario's) en onderwerpen (in pub-subscenario's).

Connecties

Een verbinding omvat een virtuele verbinding met een JMS-provider. Met Azure Service Bus vertegenwoordigt het een stateful verbinding tussen de toepassing en Azure Service Bus via AMQP.

Er wordt een verbinding gemaakt op basis van de verbindingsfactory, zoals wordt weergegeven in het volgende voorbeeld:

Connection connection = factory.createConnection();

Sessies

Een sessie is een context met één thread voor het produceren en gebruiken van berichten. Het kan worden gebruikt om berichten, berichtproducenten en consumenten te maken, maar het biedt ook een transactionele context om groepering van verzonden en ontvangen naar een atomische werkeenheid toe te staan.

Een sessie kan worden gemaakt op basis van het verbindingsobject, zoals wordt weergegeven in het volgende voorbeeld:

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

Notitie

JMS-API biedt geen ondersteuning voor het ontvangen van berichten van service bus-wachtrijen of onderwerpen waarvoor berichtensessies zijn ingeschakeld.

Sessiemodi

Er kan een sessie worden gemaakt met een van de onderstaande modi.

Sessiemodi Gedrag
Session.AUTO_ACKNOWLEDGE De sessie bevestigt automatisch de ontvangst van een bericht van een client wanneer de sessie is geretourneerd van een oproep om te ontvangen of wanneer de berichtlistener de sessie heeft aangeroepen om het bericht te verwerken.
Session.CLIENT_ACKNOWLEDGE De client bevestigt een verbruikt bericht door de bevestigingsmethode van het bericht aan te roepen.
Session.DUPS_OK_ACKNOWLEDGE Met deze bevestigingsmodus wordt de sessie geïnstrueerd om de bezorging van berichten te bevestigen.
Session.SESSION_TRANSACTED Deze waarde kan worden doorgegeven als het argument voor de methode createSession(int sessionMode) op het Verbinding maken ion-object om op te geven dat de sessie een lokale transactie moet gebruiken.

Wanneer de sessiemodus niet is opgegeven, wordt de Session.AUTO_ACKNOWLEDGE standaard gekozen.

JMSContext

Notitie

JMSContext wordt gedefinieerd als onderdeel van de JMS 2.0-specificatie.

JMSContext combineert de functionaliteit die wordt geboden door het verbindings- en sessieobject. Het kan worden gemaakt op basis van het verbindingsfactory-object.

JMSContext context = connectionFactory.createContext();

JMSContext-modi

Net als het sessieobject kan de JMSContext worden gemaakt met dezelfde bevestigingsmodi als vermeld in sessiemodi.

JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);

Wanneer de modus niet is opgegeven, wordt de JMSContext.AUTO_ACKNOWLEDGE standaard gekozen.

JMS-berichtproducenten

Een berichtproducent is een object dat wordt gemaakt met behulp van een JMSContext of een sessie en wordt gebruikt voor het verzenden van berichten naar een bestemming.

Het kan worden gemaakt als een zelfstandig object, zoals wordt weergegeven in het volgende voorbeeld:

JMSProducer producer = context.createProducer();

Of gemaakt tijdens runtime wanneer een bericht moet worden verzonden.

context.createProducer().send(destination, message);

JMS-berichtgebruikers

Een berichtconsumer is een object dat wordt gemaakt door een JMSContext of een sessie en wordt gebruikt voor het ontvangen van berichten die naar een bestemming zijn verzonden. Deze kan worden gemaakt zoals in dit voorbeeld wordt weergegeven:

JMSConsumer consumer = context.createConsumer(dest);

Synchrone ontvangst via receive()-methode

De gebruiker van het bericht biedt een synchrone manier om berichten van de bestemming te ontvangen via de receive() methode.

Als er geen argumenten/time-outs zijn opgegeven of als er een time-out van '0' is opgegeven, blokkeert de consument voor onbepaalde tijd tenzij het bericht binnenkomt of de verbinding is verbroken (afhankelijk van wat eerder is).

Message m = consumer.receive();
Message m = consumer.receive(0);

Wanneer een niet-nul-positief argument wordt opgegeven, blokkeert de consument totdat die timer verloopt.

Message m = consumer.receive(1000); // time out after one second.

Asynchrone ontvangst met JMS-berichtlisteners

Een berichtenlistener is een object dat wordt gebruikt voor asynchrone verwerking van berichten op een bestemming. Hiermee wordt de MessageListener interface geïmplementeerd, die de onMessage methode bevat waarin de specifieke bedrijfslogica moet leven.

Een berichtlistenerobject moet worden geïnstantieerd en geregistreerd bij een specifieke berichtgebruiker met behulp van de setMessageListener methode.

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

Gebruiken vanuit onderwerpen

JMS-berichtgebruikers worden gemaakt op basis van een bestemming, die een wachtrij of een onderwerp kan zijn.

Consumenten in wachtrijen zijn simpelweg objecten aan de clientzijde die zich in de context van de sessie (en Verbinding maken ion) bevinden tussen de clienttoepassing en Azure Service Bus.

Consumenten over onderwerpen hebben echter twee delen -

  • Een object aan de clientzijde dat zich in de context van de sessie (of JMSContext) bevindt, en,
  • Een abonnement dat een entiteit is in Azure Service Bus.

De abonnementen worden hier beschreven en kunnen een van de volgende zijn:

  • Gedeelde duurzame abonnementen
  • Gedeelde niet-duurzame abonnementen
  • Niet-gedeelde duurzame abonnementen
  • Niet-gedeelde niet-duurzame abonnementen

JMS-wachtrijbrowsers

De JMS-API biedt een QueueBrowser object waarmee de toepassing door de berichten in de wachtrij kan bladeren en de headerwaarden voor elk bericht kan weergeven.

Een wachtrijbrowser kan worden gemaakt met behulp van de JMSContext, zoals in het volgende voorbeeld:

QueueBrowser browser = context.createBrowser(queue);

Notitie

JMS-API biedt geen API om door een onderwerp te bladeren.

Dit komt doordat het onderwerp zelf de berichten niet opslaat. Zodra het bericht naar het onderwerp wordt verzonden, wordt het doorgestuurd naar de juiste abonnementen.

JMS-berichtkiezers

Berichtkiezers kunnen worden gebruikt door toepassingen te ontvangen om de ontvangen berichten te filteren. Met berichtkiezers offload de ontvangende toepassing het werk van het filteren van berichten naar de JMS-provider (in dit geval Azure Service Bus) in plaats van die verantwoordelijkheid zelf te nemen.

Selectors kunnen worden gebruikt bij het maken van een van de onderstaande consumenten-

  • Gedeeld duurzaam abonnement
  • Niet-gedeeld duurzaam abonnement
  • Gedeeld niet-duurzaam abonnement
  • Niet-gedeeld niet-duurzaam abonnement
  • Wachtrijbrowser

AMQP-verwijdering en Service Bus-bewerkingstoewijzing

Hier ziet u hoe een AMQP-verwijdering wordt omgezet in een Service Bus-bewerking:

ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()

Samenvatting

In deze ontwikkelaarshandleiding ziet u hoe Java-clienttoepassingen met behulp van Java Message Service (JMS) verbinding kunnen maken met Azure Service Bus.

Volgende stappen

Raadpleeg de volgende artikelen voor meer informatie over Azure Service Bus en details over JMS-entiteiten (Java Message Service):