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ł dostosowany 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łączenie ionów

Obiekt fabryki połączeń jest używany przez klienta do nawiązywania połączenia z dostawcą JMS. Fabryka połączeń hermetyzuje zestaw parametrów konfiguracji połączenia zdefiniowanych przez administratora.

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

Aby uprościć nawiązywanie połączenia z usługą Azure Service Bus, te interfejsy są implementowane za pośrednictwem ServiceBusJmsConnectionFactorymetody , ServiceBusJmsQueueConnectionFactorylub 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 parametry 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 można utworzyć wystąpienie fabryki Połączenie ion przy użyciu poniższych parametrów.

  • Poświadczenia tokenu — reprezentuje poświadczenie umożliwiające podanie tokenu OAuth.
  • Host — nazwa hosta przestrzeni nazw warstwy Premium usługi Azure Service Bus.
  • ServiceBusJms Połączenie ionFactory Ustawienia torba właściwości zawierająca
    • 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

Obiektem docelowym jest obiekt używany przez klienta do określania docelowego generowanych komunikatów i źródła używanych komunikatów.

Miejsca docelowe są mapowe na jednostki w usłudze Azure Service Bus — kolejki (w scenariuszach punkt-punkt) i tematy (w scenariuszach pub-sub).

Połączenia

Połączenie hermetyzuje połączenie wirtualne z dostawcą JMS. Usługa Azure Service Bus reprezentuje stanowe połączenie między aplikacją a usługą Azure Service Bus za pośrednictwem protokołu AMQP.

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

Connection connection = factory.createConnection();

Sesje

Sesja to kontekst jednowątkowy do tworzenia i używania 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 komunikatów z kolejek lub tematów usługi Service Bus z włączonymi sesjami obsługi komunikatów.

Tryby sesji

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

Tryby sesji Zachowanie
Session.AUTO_ACKNOWLEDGE Sesja automatycznie potwierdza otrzymanie komunikatu klienta, gdy sesja została pomyślnie zwrócona z wywołania do odbierania lub gdy odbiornik komunikatu, który sesja wywołała, aby przetworzyć komunikat pomyślnie zwrócony.
Session.CLIENT_ACKNOWLEDGE Klient potwierdza użyty komunikat, wywołując metodę potwierdzenia komunikatu.
Session.DUPS_OK_ACKNOWLEDGE Ten tryb potwierdzenia nakazuje sesji leniwie potwierdzić dostarczanie komunikatów.
Session.SESSION_TRANSACTED Ta wartość może zostać przekazana jako argument metody createSession(int sessionMode) w obiekcie Połączenie ion, aby określić, że sesja powinna używać transakcji lokalnej.

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

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żesz też utworzyć w czasie wykonywania komunikatu, gdy będzie potrzebny do wysłania komunikatu.

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

Użytkownicy 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);

Po podaniu niezerowego argumentu dodatniego odbiorca blokuje czasomierz do momentu wygaśnięcia tego czasomierza.

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

Asynchroniczne odbieranie z odbiornikami komunikatów JMS

Odbiornik komunikatów jest obiektem używanym do asynchronicznej obsługi komunikatów w miejscu docelowym. Implementuje MessageListener interfejs, który zawiera onMessage metodę, w której musi istnieć 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

Użytkownicy komunikatów JMS są tworzone względem miejsca docelowego, który 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łączenie ion) między aplikacją kliencją a usługą Azure Service Bus.

Konsumenci w tematach 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 nietrwałe
  • Nieudostępniane trwałe subskrypcje
  • Nieudostępne subskrypcje nietrwałe

Przeglądarki kolejek JMS

Interfejs API JMS udostępnia QueueBrowser obiekt, który umożliwia aplikacji przeglądanie komunikatów w kolejce i wyświetlanie wartości nagłówka dla 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 interfejsu API do 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 odbieranie aplikacji do filtrowania odebranych komunikatów. Dzięki selektorom komunikatów odbierający aplikacja odciąża pracę filtrowania komunikatów do dostawcy JMS (w tym przypadku usługi 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ółużytkowany nietrwały subskrypcja
  • Nieudostępniana subskrypcja nietrwała
  • Przeglądarka kolejki

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

Oto jak dyspozycja protokołu AMQP przekłada się na operację 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: