Udostępnij za pośrednictwem


Używanie interfejsu API usługi Java Message Service 2.0 z usługą Azure Service Bus Premium

W tym artykule wyjaśniono, jak korzystać z popularnego interfejsu API usługi Java Message Service (JMS) 2.0 do interakcji z usługą Azure Service Bus za pośrednictwem protokołu ADVANCED Message Queueing Protocol (AMQP) 1.0.

Uwaga

Obsługa interfejsu API JMS 2.0 jest dostępna tylko w warstwie Premium i w przypadku korzystania z biblioteki azure-servicebus-jms . Jeśli używasz bibliotek JMS innych niż azure-servicebus-jms (na przykład najnowsza wersja qpid-jms-client) w przestrzeni nazw w warstwie Premium, obserwujesz zachowanie JMS 1.1. Biblioteka azure-servicebus-jms nie tworzy blokady dostawcy jakiegokolwiek rodzaju, ponieważ nadal ma zależność od klienta qpid-jms. Wszystkie interfejsy API, które działają w bibliotece qpid-jms-client, działają również w bibliotece azure-servicebus-jms.

Biblioteka azure-servicebus-jms jest również biblioteką typu open source. Biblioteka azure-servicebus-jms została utworzona głównie tak, aby usługa Service Bus mogła odróżnić klientów wymagających zachowania JMS 1.1 (zgodność z poprzednimi wersjami) w porównaniu z zachowaniem JMS 2.0 podczas pracy z przestrzenią nazw Premium. Biblioteka azure-servicebus-jms udostępnia również pewne niezbędne wartości domyślne, takie jak wartości zasad pobierania wstępnego, ponowne nawiązywanie połączeń, obsługa identyfikatora Entra firmy Microsoft, obsługa tożsamości zarządzanej, obsługa automatycznego usuwania bezczynności dla jednostek wyrejestrowych.

Następująca ścieżka do pakietu azure-servicebus-jms to najnowsza wersja biblioteki opartej na specyfikacji Dżakarty Messaging (Jakarta.* API): Maven Central: com.azure:azure-servicebus-jms. Następująca ścieżka do biblioteki azure-servicebus-jms to najnowsza wersja biblioteki przed specyfikacją Dżakarty Messaging (javax.* API): Maven Central: com.microsoft.azure:azure-servicebus-jms.

Wymagania wstępne

Rozpoczynanie pracy z usługą Service Bus

W tym przewodniku założono, że masz już przestrzeń nazw usługi Service Bus. Jeśli tego nie zrobisz, utwórz przestrzeń nazw i kolejkę przy użyciu witryny Azure Portal. Aby uzyskać więcej informacji na temat tworzenia przestrzeni nazw i kolejek usługi Service Bus, zobacz Wprowadzenie do kolejek usługi Service Bus za pośrednictwem witryny Azure Portal.

Konfigurowanie środowiska deweloperskiego Java

Aby tworzyć aplikacje Java, należy skonfigurować odpowiednie środowisko programistyczne —

  • Zainstalowano zestaw JDK (Java Development Kit) lub środowisko JRE (środowisko uruchomieniowe Java).
  • Zestaw JDK lub JRE jest dodawany do ścieżki kompilacji i odpowiednich zmiennych systemowych.
  • Środowisko IDE języka Java jest instalowane w celu korzystania z zestawu JDK lub środowiska JRE. Na przykład Eclipse lub IntelliJ.

Aby dowiedzieć się więcej na temat przygotowywania środowiska deweloperskiego dla języka Java na platformie Azure, skorzystaj z tego przewodnika.

Jakie funkcje JMS są obsługiwane?

W poniższej tabeli wymieniono funkcje usługi Java Message Service (JMS), które obecnie obsługuje usługa Azure Service Bus. Pokazuje również funkcje, które nie są obsługiwane.

Funkcja interfejs API Stan
Kolejki
  • JMSContext.createQueue( String queueName)
Obsługiwane
Tematy
  • JMSContext.createTopic( Nazwa tematu ciągu)
Obsługiwane
Kolejki tymczasowe
  • JMSContext.createTemporaryQueue()
Obsługiwane
Tematy tymczasowe
  • JMSContext.createTemporaryTopic()
Obsługiwane
Producent wiadomości /
JMSProducer
  • JMSContext.createProducer()
Obsługiwane
Przeglądarki kolejek
  • JMSContext.createBrowser(Kolejka kolejki)
  • JMSContext.createBrowser(kolejka kolejki, komunikat ciąguSelector)
Obsługiwane
Odbiorca wiadomości/
JMSConsumer
  • JMSContext.createConsumer( Miejsce docelowe)
  • JMSContext.createConsumer( Miejsce docelowe, Ciąg messageSelector)
  • JMSContext.createConsumer( Miejsce docelowe, MessageSelector ciągów, wartość logiczna noLocal)

noLocal nie jest obecnie obsługiwany
Obsługiwane
Udostępnione trwałe subskrypcje
  • JMSContext.createSharedDurableConsumer(temat tematu, nazwa ciągu)
  • JMSContext.createSharedDurableConsumer(temat tematu, nazwa ciągu, messageSelector ciągu)
Obsługiwane
Nieudostępniane trwałe subskrypcje
  • JMSContext.createDurableConsumer(Temat, Nazwa ciągu)
  • createDurableConsumer(temat tematu, nazwa ciągu, message MessageSelector, wartość logiczna noLocal)

wartość noLocal nie jest obecnie obsługiwana i powinna być ustawiona na wartość false
Obsługiwane
Udostępnione subskrypcje nietrwałe
  • JMSContext.createSharedConsumer(Temat, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Temat, String sharedSubscriptionName, String messageSelector)
Obsługiwane
Nieudostępne subskrypcje nietrwałe
  • JMSContext.createConsumer(Miejsce docelowe)
  • JMSContext.createConsumer( Miejsce docelowe, Ciąg messageSelector)
  • JMSContext.createConsumer( Miejsce docelowe, MessageSelector ciągów, wartość logiczna noLocal)

wartość noLocal nie jest obecnie obsługiwana i powinna być ustawiona na wartość false
Obsługiwane
Selektory komunikatów zależy od utworzonego konsumenta Obsługiwane
Opóźnienie dostarczania (zaplanowane komunikaty)
  • JMSProducer.setDeliveryDelay( długa dostawaDelay)
Obsługiwane
Utworzono komunikat
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Obiekt z możliwością serializacji)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Tekst ciągu)
Obsługiwane
Transakcje między jednostkami
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
Obsługiwane
Transakcje rozproszone Nieobsługiwane

Pobieranie biblioteki klienta usługi Java Message Service (JMS)

Aby użyć wszystkich funkcji dostępnych w warstwie Premium, dodaj następującą bibliotekę do ścieżki kompilacji projektu: azure-servicebus-jms. Ten pakiet udostępnia niektóre niezbędne wartości domyślne, takie jak wartości zasad pobierania wstępnego, ponowne nawiązywanie połączeń, identyfikator Entra firmy Microsoft i obsługa tożsamości zarządzanej poza polem.

Uwaga

Aby dodać plik azure-servicebus-jms do ścieżki kompilacji, użyj preferowanego narzędzia do zarządzania zależnościami dla projektu, takiego jak Maven lub Gradle.

Kodowanie aplikacji Java

Po zaimportowaniu zależności aplikacje Java można pisać w niezależny sposób od dostawcy JMS.

Nawiązywanie połączenia z usługą Azure Service Bus przy użyciu programu JMS

Aby nawiązać połączenie z usługą Azure Service Bus przy użyciu klientów JMS, potrzebne są parametry połączenia dostępne w obszarze "Zasady dostępu współdzielonego" w witrynie Azure Portal w obszarze Podstawowe parametry połączenia.

  1. Tworzenie wystąpienia ServiceBusJmsConnectionFactorySettings

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. Utwórz wystąpienie elementu ServiceBusJmsConnectionFactory przy użyciu odpowiedniego ServiceBusConnectionStringelementu .

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. Użyj elementu ConnectionFactory , aby utworzyć element , Connection a następnie Session

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

    JMSContext lub (dla klientów JMS 2.0)

    JMSContext jmsContext = factory.createContext();
    

    Ważne

    Mimo że podobnie nazwane, program JMS "Sesja" i usługa Service Bus "Sesja" są całkowicie niezależne od siebie.

    W programie JMS 1.1 sesja jest podstawowym blokiem konstrukcyjnym interfejsu API, który umożliwia utworzenie MessageProducerelementu , MessageConsumeri Message samego siebie. Aby uzyskać więcej informacji, zapoznaj się z modelem programowania interfejsu API JMS

    W usłudze Service Bus sesje są konstrukcją po stronie usługi i klienta w celu włączenia przetwarzania FIFO w kolejkach i subskrypcjach.

Pisanie aplikacji JMS

Po utworzeniu wystąpienia elementu Session lub JMSContext aplikacja może używać znanych interfejsów API JMS do wykonywania zarówno operacji zarządzania, jak i danych. Zapoznaj się z listą obsługiwanych funkcji JMS, aby zobaczyć, które interfejsy API są obsługiwane. Oto kilka przykładowych fragmentów kodu, które umożliwiają rozpoczęcie pracy z programem JMS —

Wysyłanie komunikatów do kolejki i tematu

// 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);

Odbieranie komunikatów z kolejki

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

Odbieranie komunikatów z udostępnionej trwałej subskrypcji tematu

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

Podsumowanie

W tym przewodniku pokazano, jak aplikacje klienckie Java korzystające z usługi Java Message Service (JMS) za pośrednictwem protokołu AMQP 1.0 mogą wchodzić w interakcje z usługą Azure Service Bus.

Możesz również użyć protokołu AMQP usługi Service Bus 1.0 z innych języków, w tym .NET, C, Python i PHP. Składniki utworzone przy użyciu tych różnych języków mogą niezawodnie wymieniać komunikaty i w pełni wierność przy użyciu obsługi protokołu AMQP 1.0 w usłudze Service Bus.