Utvecklarguide för Azure Service Bus JMS 2.0

Den här guiden innehåller detaljerad information som hjälper dig att kommunicera med Azure Service Bus med hjälp av Java Message Service (JMS) 2.0 API.

Som Java-utvecklare kan du läsa följande artiklar om du är nybörjare på Azure Service Bus.

Komma igång Begrepp

Programmeringsmodell för Java Message Service (JMS)

Programmeringsmodellen för Java Message Service-API:et visas i följande avsnitt:

Kommentar

Azure Service Bus Premium-nivån stöder JMS 1.1 och JMS 2.0.

Azure Service Bus – Standardnivån stöder begränsade JMS 1.1-funktioner. Mer information finns i den här dokumentationen.

JMS – byggstenar

Byggstenarna nedan är tillgängliga för kommunikation med JMS-programmet.

Kommentar

Guiden nedan har anpassats från Oracle Java EE 6 Tutorial for Java Message Service (JMS)

Den här självstudien rekommenderas för bättre förståelse av Java Message Service (JMS).

Anslut ionsfabrik

Anslutningsfabriksobjektet används av klienten för att ansluta till JMS-providern. Anslutningsfabriken kapslar in en uppsättning anslutningskonfigurationsparametrar som definieras av administratören.

Varje anslutningsfabrik är en instans av ConnectionFactory, QueueConnectionFactoryeller TopicConnectionFactory gränssnitt.

För att förenkla anslutningen med Azure Service Bus implementeras dessa gränssnitt via ServiceBusJmsConnectionFactory, ServiceBusJmsQueueConnectionFactoryrespektive ServiceBusJmsTopicConnectionFactory .

Viktigt!

Java-program som använder JMS 2.0 API kan ansluta till Azure Service Bus med hjälp av anslutningssträng eller använda en TokenCredential för att utnyttja Microsoft Entra-säkerhetskopierad autentisering. När du använder Microsoft Entra-säkerhetskopierad autentisering ska du se till att tilldela roller och behörigheter till identiteten efter behov.

Skapa en systemtilldelad hanterad identitet i Azure och använd den här identiteten för att skapa en TokenCredential.

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

Anslut ionsfabriken kan sedan instansieras med parametrarna nedan.

  • Tokenautentiseringsuppgifter – Representerar en autentiseringsuppgift som kan tillhandahålla en OAuth-token.
  • Värd – värdnamnet för Azure Service Bus Premium-nivånamnområdet.
  • ServiceBusJms Anslut ionFactory Inställningar egenskapsväska, som innehåller
    • connectionIdleTimeoutMS – tidsgräns för inaktiv anslutning i millisekunder.
    • traceFrames – boolesk flagga för att samla in AMQP-spårningsramar för felsökning.
    • andra konfigurationsparametrar

Du kan skapa fabriken på det sätt som visas här. Tokenautentiseringsuppgifterna och värden är obligatoriska parametrar, men de andra egenskaperna är valfria.

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

JMS-mål

Ett mål är det objekt som en klient använder för att ange målet för de meddelanden som skapas och källan till de meddelanden som den använder.

Mål mappas till entiteter i Azure Service Bus – köer (i punkt-till-punkt-scenarier) och ämnen (i pub-sub-scenarier).

anslutningar

En anslutning kapslar in en virtuell anslutning med en JMS-provider. Med Azure Service Bus representerar den en tillståndskänslig anslutning mellan programmet och Azure Service Bus via AMQP.

En anslutning skapas från anslutningsfabriken enligt följande exempel:

Connection connection = factory.createConnection();

Sessioner

En session är en enkeltrådad kontext för att producera och använda meddelanden. Det kan användas för att skapa meddelanden, meddelandeproducenter och konsumenter, men det ger också en transaktionskontext som tillåter gruppering av skickar och tar emot i en atomisk arbetsenhet.

En session kan skapas från anslutningsobjektet enligt följande exempel:

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

Kommentar

JMS API har inte stöd för att ta emot meddelanden från Service Bus-köer eller ämnen med meddelandesessioner aktiverade.

Sessionslägen

En session kan skapas med något av nedanstående lägen.

Sessionslägen Funktionssätt
Session.AUTO_ACKNOWLEDGE Sessionen bekräftar automatiskt en klients mottagande av ett meddelande antingen när sessionen har returnerats från ett anrop för att ta emot eller när meddelandelyssnaren sessionen har anropat för att bearbeta meddelandet returneras.
Session.CLIENT_ACKNOWLEDGE Klienten bekräftar ett förbrukat meddelande genom att anropa meddelandets bekräftelsemetod.
Session.DUPS_OK_ACKNOWLEDGE Det här bekräftelseläget instruerar sessionen att lättsamt bekräfta leveransen av meddelanden.
Session.SESSION_TRANSACTED Det här värdet kan skickas som argument till metoden createSession(int sessionMode) på Anslut ion-objektet för att ange att sessionen ska använda en lokal transaktion.

När sessionsläget inte har angetts väljs Session.AUTO_ACKNOWLEDGE som standard.

JMSContext

Kommentar

JMSContext definieras som en del av JMS 2.0-specifikationen.

JMSContext kombinerar de funktioner som tillhandahålls av anslutnings- och sessionsobjektet. Det kan skapas från anslutningsfabriksobjektet.

JMSContext context = connectionFactory.createContext();

JMSContext-lägen

Precis som sessionsobjektet kan JMSContext skapas med samma bekräftelselägen som anges i Sessionslägen.

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

När läget inte har angetts väljs JMSContext.AUTO_ACKNOWLEDGE som standard.

JMS-meddelandeproducenter

En meddelandeproducent är ett objekt som skapas med hjälp av en JMSContext eller en session och som används för att skicka meddelanden till ett mål.

Det kan skapas antingen som ett fristående objekt som visas i följande exempel:

JMSProducer producer = context.createProducer();

Eller skapad vid körning när ett meddelande behövs för att skickas.

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

JMS-meddelandekonsumenter

En meddelandekonsument är ett objekt som skapas av en JMSContext eller en session och används för att ta emot meddelanden som skickas till ett mål. Den kan skapas som du ser i det här exemplet:

JMSConsumer consumer = context.createConsumer(dest);

Synkron mottagning via metoden receive()

Meddelandekonsumenten tillhandahåller ett synkront sätt att ta emot meddelanden från målet via receive() metoden.

Om inga argument/tidsgräns har angetts eller en tidsgräns på 0 har angetts blockeras konsumenten på obestämd tid om inte meddelandet kommer eller anslutningen bryts (beroende på vilket som inträffar tidigare).

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

När ett positivt argument som inte är noll anges blockerar konsumenten tills timern upphör att gälla.

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

Asynkrona mottagningar med JMS-meddelandelyssnare

En meddelandelyssnare är ett objekt som används för asynkron hantering av meddelanden på ett mål. Det implementerar MessageListener gränssnittet, som innehåller den onMessage metod där den specifika affärslogik måste finnas.

Ett meddelandelyssnarobjekt måste instansieras och registreras mot en specifik meddelandekonsument med hjälp av setMessageListener metoden .

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

Använda från ämnen

JMS-meddelandekonsumenter skapas mot ett mål, vilket kan vara en kö eller ett ämne.

Konsumenter i köer är helt enkelt objekt på klientsidan som finns i kontexten för sessionen (och Anslut ion) mellan klientprogrammet och Azure Service Bus.

Konsumenter i ämnen har dock 2 delar -

  • Ett objekt på klientsidan som finns i kontexten för sessionen (eller JMSContext) och,
  • En prenumeration som är en entitet på Azure Service Bus.

Prenumerationerna dokumenteras här och kan vara något av följande:

  • Delade varaktiga prenumerationer
  • Delade icke-varaktiga prenumerationer
  • Ej delade varaktiga prenumerationer
  • Ej delade icke-varaktiga prenumerationer

JMS-köwebbläsare

JMS-API:et innehåller ett QueueBrowser objekt som gör att programmet kan bläddra bland meddelandena i kön och visa huvudvärdena för varje meddelande.

Du kan skapa en köwebbläsare med JMSContext som i följande exempel:

QueueBrowser browser = context.createBrowser(queue);

Kommentar

JMS API tillhandahåller inte något API för att bläddra i ett ämne.

Det beror på att själva ämnet inte lagrar meddelandena. Så snart meddelandet skickas till ämnet vidarebefordras det till lämpliga prenumerationer.

JMS-meddelandeväljare

Meddelandeväljare kan användas genom att ta emot program för att filtrera de meddelanden som tas emot. Med meddelandeväljare avlastar det mottagande programmet arbetet med att filtrera meddelanden till JMS-providern (i det här fallet Azure Service Bus) i stället för att ta det ansvaret självt.

Väljare kan användas när du skapar någon av nedanstående konsumenter -

  • Delad varaktig prenumeration
  • Ej delad beständig prenumeration
  • Delad icke-varaktig prenumeration
  • Ej delad icke-varaktig prenumeration
  • Köwebbläsare

AMQP-borttagning och Service Bus-åtgärdsmappning

Så här översätter en AMQP-borttagning till en Service Bus-åtgärd:

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()

Sammanfattning

Den här utvecklarguiden visade hur Java-klientprogram med Java Message Service (JMS) kan ansluta med Azure Service Bus.

Nästa steg

Mer information om Azure Service Bus och information om JMS-entiteter (Java Message Service) finns i följande artiklar: