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 QueueConnectionFactory
TopicConnectionFactory
.
Aby uprościć nawiązywanie połączenia z usługą Azure Service Bus, te interfejsy są implementowane za pośrednictwem ServiceBusJmsConnectionFactory
metody , 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 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.
- Tożsamość zarządzana przypisana przez system
- Tożsamość zarządzana przypisana przez użytkownika
- Jednostka usługi
- Uwierzytelnianie ciągu Połączenie ion
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:
- Service Bus — kolejki, tematy i subskrypcje
- Service Bus — jednostki usługi komunikatów Java
- Obsługa protokołu AMQP 1.0 w usłudze Azure Service Bus
- Service Bus AMQP 1.0 Developer's Guide
- Wprowadzenie do kolejek usługi Service Bus
- Interfejs API usługi Java Message Service (zewnętrzny dokument Oracle)
- Dowiedz się, jak przeprowadzić migrację z usługi ActiveMQ do usługi Service Bus