Dela via


Använda Java Message Service 2.0 API med Azure Service Bus Premium

Den här artikeln beskriver hur du använder det populära Java Message Service (JMS) 2.0-API :et för att interagera med Azure Service Bus via PROTOKOLLET ADVANCED Message Queueing Protocol (AMQP) 1.0.

Viktiga anteckningar

Här är några viktiga punkter:

  • Stöd för JMS 2.0 API är endast tillgängligt på premiumnivån och när du använder biblioteket azure-servicebus-jms .
  • Om du använder andra JMS-bibliotek än azure-servicebus-jms (till exempel den senaste qpid-jms-client) mot ett premiumnamnområde kan du observera JMS 1.1-beteendet och vissa av JMS 2.0-funktionerna kanske inte fungerar som förväntat. Biblioteket azure-servicebus-jms skapar inte ett leverantörslås av något slag eftersom det fortfarande är beroende av qpid-jms-client. Alla API:er som fungerar med qpid-jms-client fungerar även på biblioteket azure-servicebus-jms.
  • Azure-servicebus-jms är också ett bibliotek med öppen källkod. Biblioteket azure-servicebus-jms skapades huvudsakligen så att Service Bus-tjänsten kan skilja mellan kunder som behöver JMS 1.1-beteendet (bakåtkompatibilitet) jämfört med JMS 2.0-beteendet när de arbetar mot ett premiumnamnområde. Biblioteket azure-servicebus-jms innehåller också några nödvändiga standardvärden, som till exempel principvärden för förhämtning, återanslutningsprinciper, Microsoft Entra-ID, stöd för hanterad identitet och stöd för automatisk borttagning vid inaktivitet för entiteter.
  • Följande sökväg till paketet azure-servicebus-jms är den senaste versionen av biblioteket som baseras på Jakarta Messaging-specifikationen (Jakarta.* API'er): Maven Central: com.azure:azure-servicebus-jms. Och följande sökväg till azure-servicebus-jms är den senaste versionen av biblioteket före Jakarta Messaging-specifikationen (javax.* API:er): Maven Central: com.microsoft.azure:azure-servicebus-jms.

Förutsättningar

Kom igång med Service Bus

Den här guiden förutsätter att du redan har ett Service Bus-namnområde. Om du inte gör det skapar du ett namnområde och en kö med hjälp av Azure-portalen. Mer information om hur du skapar Service Bus-namnområden och -köer finns i Komma igång med Service Bus-köer via Azure-portalen.

Konfigurera en Java Development-miljö

För att utveckla Java-program måste du konfigurera lämplig utvecklingsmiljö –

  • Antingen installeras JDK (Java Development Kit) eller JRE (Java Runtime Environment).
  • JDK eller JRE läggs till i projektets sökväg och de relevanta systemvariablerna.
  • En Java IDE installeras för att använda JDK eller JRE. Till exempel Eclipse eller IntelliJ.

Om du vill veta mer om hur du förbereder din utvecklarmiljö för Java i Azure kan du använda den här guiden.

Vilka JMS-funktioner stöds?

I följande tabell visas de JMS-funktioner (Java Message Service) som Azure Service Bus stöder för närvarande. Den visar även funktioner som inte stöds.

Egenskap API (gränssnitt för programmering av applikationer) Läge
Köer
  • JMSContext.createQueue( String queueName)
Stödd
Ämnen
  • JMSContext.createTopic( String topicName)
Stödd
Tillfälliga köer
  • JMSContext.createTemporaryQueue()
Stödd
Tillfälliga ämnen
  • JMSContext.createTemporaryTopic()
Stödd
Meddelandeproducent/
JMSProducer
  • JMSContext.createProducer()
Stödd
Köwebbläsare
  • JMSContext.createBrowser(kö)
  • JMSContext.createBrowser(Kö kö, strängmeddelandeväljare)
Stödd
Meddelandekonsument/
JMSConsumer
  • JMSContext.createConsumer(Destination destination)
  • JMSContext.createConsumer(mål, strängmeddelandeväljare)
  • JMSContext.createConsumer( Destination destination, SträngmeddelandeVäljare, boolean noLocal)

noLocal stöds för närvarande inte
Stödd
Delade beständiga prenumerationer
  • JMSContext.createSharedDurableConsumer(Ämnesämne, Strängnamn)
  • JMSContext.createSharedDurableConsumer(Ämnesämne, Strängnamn, SträngmeddelandeVälj)
Stödd
Odelade hållbara prenumerationer
  • JMSContext.createDurableConsumer(Ämnesämne, Strängnamn)
  • createDurableConsumer(Ämnesämne, Strängnamn, SträngmeddelandeVälj, boolesk noLocal)

noLocal stöds för närvarande inte och bör anges till false
Stödd
Delade icke-varaktiga prenumerationer
  • JMSContext.createSharedConsumer(Ämnesämne, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
Stödd
Ej delade icke-varaktiga prenumerationer
  • JMSContext.createConsumer(destination)
  • JMSContext.createConsumer(mål, strängmeddelandeväljare)
  • JMSContext.createConsumer(Destination destination, String messageSelector, boolean noLocal)

noLocal stöds för närvarande inte och bör anges till false
Stödd
Meddelandeväljare Beror på vilken konsument som har skapats. Service Bus-väljare stöder inte SQL-nyckelorden "LIKE" och "BETWEEN". Stödd
Leveransfördröjning (schemalagda meddelanden)
  • JMSProducer.setDeliveryDelay( long deliveryDelay)
Stödd
Meddelande har skapats
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage(serialiserbart objekt)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Strängtext)
Stödd
Transaktioner mellan entiteter
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
Stödd
Distribuerade transaktioner Stöds inte

Ladda ned JMS-klientbiblioteket (Java Message Service)

Om du vill använda alla tillgängliga funktioner på premiumnivån lägger du till följande bibliotek i projektets byggsökväg: azure-servicebus-jms. Det här paketet innehåller några nödvändiga standardvärden som prefetch-principvärden, återanslutningsprinciper, Microsoft Entra-ID och stöd för hanterad identitet direkt.

Anmärkning

Om du vill lägga till azure-servicebus-jms i byggsökvägen kan du använda det föredragna beroendehanteringsverktyget för ditt projekt, som Maven eller Gradle.

Kodning av Java-applikationer

När beroendena har importerats kan Java-programmen skrivas på ett sätt som är oberoende av JMS-providers.

Ansluta till Azure Service Bus med JMS

För att ansluta till Azure Service Bus med JMS-klienter behöver du anslutningssträngen som är tillgänglig i principerna för delad åtkomst i Azure-portalen under Primär anslutningssträng.

  1. Instansiera ServiceBusJmsConnectionFactorySettings

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. Instansiera ServiceBusJmsConnectionFactory med lämplig ServiceBusConnectionString.

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. ConnectionFactory Använd för att antingen skapa en Connection och sedan enSession

    Connection connection = factory.createConnection();
    Session session = connection.createSession();
    

    eller en JMSContext (för JMS 2.0-klienter)

    JMSContext jmsContext = factory.createContext();
    

    Viktigt!

    Även om den heter på samma sätt är en JMS-session och Service Bus-session helt oberoende av varandra.

    I JMS 1.1 är Session en viktig byggsten i API:et som möjliggör skapandet av MessageProducer, MessageConsumer och själva Message. Mer information finns i programmeringsmodellen för JMS API

    I Service Bus är sessioner en mekanism på tjänst- och klientsidan för att möjliggöra FIFO-bearbetning i köer och prenumerationer.

Skriva JMS-programmet

När Session eller JMSContext har instansierats kan ditt program använda de välbekanta JMS-API:erna för att utföra både hanterings- och dataåtgärder. Se listan över JMS-funktioner som stöds för att se vilka API:er som stöds. Här följer några exempelkodfragment för att komma igång med JMS –

Skicka meddelanden till en kö och ett ämne

// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();

// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();

// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);

Ta emot meddelanden från en kö

// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");

// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);

// Receive the message
Message msg = (Message) consumer.receive();

Ta emot meddelanden från en delad varaktig prenumeration i ett ämne

// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");

// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");

// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();

Sammanfattning

Den här guiden visar hur Java-klientprogram med Java Message Service (JMS) via AMQP 1.0 kan interagera med Azure Service Bus.

Du kan också använda Service Bus AMQP 1.0 från andra språk, inklusive .NET, C, Python och PHP. Komponenter som skapats med dessa olika språk kan utbyta meddelanden på ett tillförlitligt sätt och med fullständig återgivning med hjälp av AMQP 1.0-stöd i Service Bus.