Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Opmerking
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.
Opmerking
De onderstaande handleiding is aangepast uit de Oracle Java EE 6-zelfstudie voor Java Message Service (JMS)
Het raadplegen van deze handleiding wordt aanbevolen voor een beter begrip van de Java Message Service (JMS).
Verbindingsfabriek
Het object connection factory wordt door de client gebruikt om verbinding te maken met de JMS-provider. De connection factory omvat een set configuratieparameters voor verbindingen die door de beheerder zijn gedefinieerd.
Elke verbindingsfactory is een exemplaar van ConnectionFactory
, QueueConnectionFactory
of TopicConnectionFactory
interface.
Om het maken van verbinding met Azure Service Bus te vereenvoudigen, worden deze interfaces geïmplementeerd via ServiceBusJmsConnectionFactory
respectievelijk, ServiceBusJmsQueueConnectionFactory
of 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 met behulp van een 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.
- Door het systeem toegewezen beheerde identiteit
- Door de gebruiker toegewezen beheerde identiteit
- Service-principal
- Verificatie van verbindingsreeks
Maak een door het systeem toegewezen beheerde identiteit in Azure en gebruik deze identiteit om een TokenCredential
.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
De Verbindingsfabriek 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.
- Eigenschappenverzameling van ServiceBusJmsConnectionFactorySettings, die eigenschappen bevat.
- connectionIdleTimeoutMS - time-out voor inactieve verbinding 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 komen overeen met entiteiten in Azure Service Bus, zoals wachtrijen (in punt-naar-puntscenario's) en topics (in pub-subscenario's).
Verbindingen
Een verbinding omvat een virtuele verbinding met een JMS-provider. Met Azure Service Bus is er sprake van 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);
Opmerking
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 ofwel wanneer de sessie succesvol is teruggekeerd van een oproep om het bericht te ontvangen, of wanneer de berichtluisteraar die de sessie heeft aangeroepen om het bericht te verwerken, succesvol retourneert. |
Session.KLANT_ERKENNING | De client erkent een verbruikt bericht door de erkenningsmethode van het bericht aan te roepen. |
Session.DUPS_OK_ACKNOWLEDGE | Deze bevestigingsmodus instrueert de sessie om de bezorging van berichten op een luie manier te bevestigen. |
Session.SESSION_TRANSACTED | Deze waarde kan worden doorgegeven als het argument voor de methode createSession(int sessionMode) in het verbindingsobject 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
Opmerking
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 uit het verbindingsfabricage-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) bevinden tussen de clienttoepassing en Azure Service Bus.
Consumenten op bepaalde gebieden hebben echter twee onderdelen -
- 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);
Opmerking
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-berichtselectors
Berichtselectors kunnen door ontvangende toepassingen worden gebruikt om de ontvangen berichten te filteren. Met berichtselectoren verplaatst 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
- Wachtrijconsumer
- Wachtrijbrowser
Opmerking
Service Bus-selectors bieden geen ondersteuning voor SQL-trefwoorden LIKE en BETWEEN.
AMQP-verwijdering en Service Bus-bewerkingstoewijzing
Hier ziet u hoe een AMQP-dispositie vertaalt naar een Service Bus-operatie:
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):
- Service Bus - Wachtrijen, onderwerpen en abonnementen
- Service Bus - Java Message Service-entiteiten
- AMQP 1.0-ondersteuning in Azure Service Bus
- Handleiding voor ontwikkelaars van Service Bus AMQP 1.0
- Aan de slag met Service Bus-wachtrijen
- Java Message Service API externe Oracle-documentatie
- Meer informatie over het migreren van ActiveMQ naar Service Bus