Udostępnij za pośrednictwem


Przewodnik dla deweloperów usługi Azure Service Bus JMS 2.0

Ten przewodnik zawiera szczegółowe informacje ułatwiające komunikację z usługą Azure Service Bus przy użyciu interfejsu API usługi Java Message Service (JMS) 2.0.

Jako deweloper języka Java, jeśli dopiero zaczynasz korzystać z usługi Azure Service Bus, rozważ przeczytanie następujących artykułów.

Wprowadzenie Pojęcia

Model programowania usługi Java Message Service (JMS)

Model programowania interfejsu API usługi Komunikatów Java jest pokazany w poniższych sekcjach:

Uwaga

Warstwa Premium usługi Azure Service Bus obsługuje JMS 1.1 i JMS 2.0.

Azure Service Bus — warstwa Standardowa obsługuje ograniczoną funkcjonalność programu JMS 1.1. Aby uzyskać więcej informacji, zapoznaj się z tą dokumentacją.

JMS — bloki konstrukcyjne

Poniższe bloki konstrukcyjne są dostępne do komunikowania się z aplikacją JMS.

Uwaga

Poniższy przewodnik został zaadaptowany z Samouczka Oracle Java EE 6 dla usługi Java Message Service (JMS)

Zapoznanie się z tym samouczkiem jest zalecane, aby lepiej zrozumieć usługę Java Message Service (JMS).

Fabryka połączeń

Obiekt fabryki połączeń jest używany przez klienta do łączenia się z dostawcą JMS. Fabryka połączeń zawiera zestaw parametrów konfiguracji połączenia, które są zdefiniowane przez administratora.

Każda fabryka połączeń jest wystąpieniem interfejsu ConnectionFactory, QueueConnectionFactory, lub TopicConnectionFactory.

Aby uprościć nawiązywanie połączenia z usługą Azure Service Bus, te interfejsy są implementowane za pośrednictwem ServiceBusJmsConnectionFactory, ServiceBusJmsQueueConnectionFactory lub ServiceBusJmsTopicConnectionFactory odpowiednio.

Ważne

Aplikacje Java korzystające z interfejsu API JMS 2.0 mogą łączyć się z usługą Azure Service Bus przy użyciu parametrów połączenia lub używać elementu TokenCredential do korzystania z uwierzytelniania opartego na usłudze Microsoft Entra. W przypadku korzystania z uwierzytelniania opartego na usłudze Microsoft Entra upewnij się, że w razie potrzeby przypisz role i uprawnienia do tożsamości.

Utwórz tożsamość zarządzaną przypisaną przez system na platformie Azure i użyj tej tożsamości, aby utworzyć element TokenCredential.

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

Następnie fabrykę połączeń można utworzyć przy użyciu poniższych parametrów.

  • Poświadczenie tokenu — to poświadczenie, które może dostarczyć token OAuth.
  • Host — nazwa hosta przestrzeni nazw warstwy Premium usługi Azure Service Bus.
  • ServiceBusJmsConnectionFactorySettings zbiór właściwości, który zawiera
    • connectionIdleTimeoutMS — limit czasu bezczynności połączenia w milisekundach.
    • traceFrames — flaga logiczna do zbierania ramek śledzenia protokołu AMQP na potrzeby debugowania.
    • inne parametry konfiguracji

Fabrykę można utworzyć, jak pokazano tutaj. Poświadczenia tokenu i host są wymaganymi parametrami, ale inne właściwości są opcjonalne.

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

Miejsce docelowe programu JMS

Punkt docelowy jest obiektem używanym przez klienta do określania celu wyprodukowanych komunikatów oraz źródła odbieranych komunikatów.

Cele są odwzorowywane na jednostki w Azure Service Bus — kolejki (w scenariuszach punkt-punkt) i topics (w scenariuszach pub-sub).

Połączenia

Połączenie obejmuje wirtualne połączenie z dostawcą JMS. W przypadku Azure Service Bus, oznacza to stanowe połączenie między aplikacją a Azure Service Bus za pośrednictwem protokołu AMQP.

Połączenie jest tworzone z fabryki połączeń, jak to pokazano w przykładzie poniżej:

Connection connection = factory.createConnection();

Sesji

Sesja to kontekst jednowątkowy do tworzenia i konsumpcji komunikatów. Można go użyć do tworzenia komunikatów, producentów komunikatów i odbiorców, ale zapewnia również kontekst transakcyjny, aby umożliwić grupowanie wysyłania i odbierania do niepodzielnej jednostki pracy.

Sesję można utworzyć na podstawie obiektu połączenia, jak pokazano w poniższym przykładzie:

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

Uwaga

Interfejs API JMS nie obsługuje odbierania wiadomości z kolejek lub tematów usługi Service Bus, gdy są włączone sesje wiadomości.

Tryby sesji

Sesję można utworzyć przy użyciu dowolnego z poniższych trybów.

Tryby sesji Zachowanie
Session.AUTO_ACKNOWLEDGE Sesja automatycznie potwierdza odebranie wiadomości przez klienta albo wtedy, gdy sesja pomyślnie zakończyła wywołanie funkcji odbierania, albo gdy nasłuchiwacz wiadomości, który sesja uruchomiła do przetworzenia wiadomości, pomyślnie zakończy swoje działanie.
Session.CLIENT_ACKNOWLEDGE Klient potwierdza przetworzony komunikat, wywołując metodę potwierdzania komunikatu.
Session.DUPS_OK_ACKNOWLEDGE Ten tryb potwierdzenia nakazuje sesji z opóźnieniem potwierdzać odbiór komunikatów.
Session.SESSION_TRANSACTED Ta wartość może zostać przekazana jako argument metody createSession(int sessionMode) w obiekcie Connection, aby określić, że sesja powinna używać transakcji lokalnej.

Gdy tryb sesji nie jest określony, Session.AUTO_ACKNOWLEDGE jest domyślnie wybierana.

JMSContext

Uwaga

Element JMSContext jest definiowany jako część specyfikacji JMS 2.0.

JMSContext łączy funkcje udostępniane przez obiekt połączenia i sesji. Można go utworzyć na podstawie obiektu fabryki połączeń.

JMSContext context = connectionFactory.createContext();

Tryby JMSContext

Podobnie jak w przypadku obiektu Session , obiekt JMSContext można utworzyć przy użyciu tych samych trybów potwierdzenia, jak wspomniano w trybach sesji.

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

Gdy tryb nie jest określony, JMSContext.AUTO_ACKNOWLEDGE jest domyślnie wybierany.

Producenci komunikatów JMS

Producent komunikatów to obiekt, który jest tworzony przy użyciu obiektu JMSContext lub sesji i używany do wysyłania komunikatów do miejsca docelowego.

Można go utworzyć jako obiekt autonomiczny, jak pokazano w poniższym przykładzie:

JMSProducer producer = context.createProducer();

Może zostać utworzona w czasie wykonywania, gdy zachodzi potrzeba wysłania wiadomości.

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

Odbiorcy komunikatów JMS

Odbiorca komunikatu to obiekt, który jest tworzony przez obiekt JMSContext lub Sesja i używany do odbierania komunikatów wysyłanych do miejsca docelowego. Można go utworzyć, jak pokazano w tym przykładzie:

JMSConsumer consumer = context.createConsumer(dest);

Synchroniczne odbieranie za pośrednictwem metody receive()

Odbiorca komunikatu zapewnia synchroniczny sposób odbierania komunikatów z miejsca docelowego za pośrednictwem receive() metody .

Jeśli nie określono żadnych argumentów/limitu czasu lub określono limit czasu "0", to użytkownik blokuje się na czas nieokreślony, chyba że zostanie wyświetlony komunikat lub połączenie zostanie przerwane (w zależności od tego, która z nich jest wcześniejsza).

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

Gdy zostanie podany niezerowy, dodatni argument, odbiorca zostaje zablokowany do momentu wygaśnięcia tego czasomierza.

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

Asynchroniczne odbieranie z nasłuchiwaczami komunikatów JMS

Odbiornik komunikatów jest obiektem używanym do asynchronicznej obsługi komunikatów w miejscu docelowym. Implementuje interfejs MessageListener, który zawiera metodę onMessage, w której powinna się znajdować określona logika biznesowa.

Obiekt odbiornika komunikatów musi zostać utworzony i zarejestrowany dla określonego odbiorcy komunikatu setMessageListener przy użyciu metody .

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

Korzystanie z tematów

Konsumenci komunikatów JMS są tworzeni względem miejsca docelowego, które może być kolejką lub tematem.

Konsumenci w kolejkach to po prostu obiekty po stronie klienta, które znajdują się w kontekście sesji (i połączenia) między aplikacją kliencją a usługą Azure Service Bus.

Konsumenci w związku z tematami mają jednak 2 części —

  • Obiekt po stronie klienta, który znajduje się w kontekście sesji (lub JMSContext) i,
  • Subskrypcja, która jest jednostką w usłudze Azure Service Bus.

Subskrypcje są udokumentowane tutaj i mogą być jednym z następujących elementów:

  • Udostępnione trwałe subskrypcje
  • Udostępnione subskrypcje tymczasowe
  • Niedzielone trwałe subskrypcje
  • Niewspółdzielone subskrypcje przejściowe

Przeglądarki kolejek JMS

API JMS udostępnia QueueBrowser obiekt, który umożliwia aplikacji przeglądanie komunikatów w kolejce i wyświetlanie wartości nagłówków każdego komunikatu.

Przeglądarkę kolejki można utworzyć przy użyciu pliku JMSContext, jak w poniższym przykładzie:

QueueBrowser browser = context.createBrowser(queue);

Uwaga

Interfejs API JMS nie udostępnia możliwości przeglądania tematu.

Dzieje się tak, ponieważ sam temat nie przechowuje komunikatów. Gdy tylko wiadomość zostanie wysłana do tematu, zostanie ona przekazana do odpowiednich subskrypcji.

Selektory komunikatów JMS

Selektory komunikatów mogą być używane przez odbierające aplikacje do filtrowania otrzymywanych komunikatów. Dzięki selektorom komunikatów odbierająca aplikacja przekazuje odpowiedzialność za filtrowanie komunikatów dostawcy JMS (w tym przypadku usłudze Azure Service Bus) zamiast przejmować tę odpowiedzialność.

Selektory można wykorzystać podczas tworzenia dowolnego z poniższych odbiorców —

  • Udostępniona trwała subskrypcja
  • Nieudostępniętą trwałą subskrypcję
  • Współdzielona nietrwała subskrypcja
  • Nietrwała subskrypcja nieudostępniana
  • Odbiorca kolejki
  • Przeglądarka kolejki

Uwaga

Selektory usługi Service Bus nie obsługują słów kluczowych SQL "LIKE" i "BETWEEN".

Mapowanie dyspozycji protokołu AMQP i operacji usługi Service Bus

Oto jak dyspozycja protokołu AMQP odnosi się do operacji usługi Service Bus.

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

Podsumowanie

W tym przewodniku dla deweloperów pokazano, jak aplikacje klienckie Java korzystające z usługi Java Message Service (JMS) mogą łączyć się z usługą Azure Service Bus.

Następne kroki

Aby uzyskać więcej informacji na temat usługi Azure Service Bus i szczegółów dotyczących jednostek usługi Java Message Service (JMS), zapoznaj się z następującymi artykułami: