Panduan developer Azure Service Bus JMS 2.0
Panduan ini berisi informasi terperinci untuk membantu Anda berhasil berkomunikasi dengan Azure Service Bus menggunakan Java Message Service (JMS) 2.0 API.
Sebagai pengembang Java, jika Anda baru menggunakan Azure Bus Layanan, pertimbangkan untuk membaca artikel berikut.
Memulai | Konsep |
---|---|
Model Pemrograman Java Message Service (JMS)
Model pemrograman API Java Message Service seperti yang ditunjukkan di bagian berikut:
Catatan
Tingkat Premium Azure Service Bus mendukung JMS 1.1 dan JMS 2.0.
Azure Service Bus - Tingkat Standar mendukung fungsionalitas JMS 1.1 terbatas. Untuk detail selengkapnya, silakan merujuk ke dokumentasi ini.
JMS - Blok penyusun
Blok penyusun di bawah ini tersedia untuk berkomunikasi dengan aplikasi JMS.
Catatan
Panduan di bawah ini telah diadaptasi dari Oracle Java EE 6 Tutorial for Java Message Service (JMS)
Mengacu pada tutorial ini direkomendasikan untuk pemahaman yang lebih baik tentang Java Message Service (JMS).
Pabrik koneksi
Objek pabrik koneksi digunakan oleh klien untuk terhubung dengan penyedia JMS. Pabrik koneksi merangkum serangkaian parameter konfigurasi koneksi yang ditentukan oleh administrator.
Setiap pabrik koneksi adalah instans ConnectionFactory
antarmuka , , QueueConnectionFactory
atau TopicConnectionFactory
.
Untuk menyederhanakan koneksi dengan Azure Bus Layanan, antarmuka ini diimplementasikan melalui ServiceBusJmsConnectionFactory
, , ServiceBusJmsQueueConnectionFactory
atau ServiceBusJmsTopicConnectionFactory
masing-masing.
Penting
Aplikasi Java yang memanfaatkan API JMS 2.0 dapat terhubung ke Azure Bus Layanan menggunakan string koneksi, atau menggunakan TokenCredential
untuk memanfaatkan autentikasi yang didukung Microsoft Entra. Saat menggunakan autentikasi yang didukung Microsoft Entra, pastikan untuk menetapkan peran dan izin ke identitas sesuai kebutuhan.
- Identitas Terkelola yang Ditetapkan Sistem
- Identitas Terkelola yang Ditetapkan Pengguna
- Perwakilan Layanan
- autentikasi string Koneksi ion
Buat identitas terkelola yang ditetapkan sistem di Azure, dan gunakan identitas ini untuk membuat TokenCredential
.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
Pabrik Koneksi ion kemudian dapat dibuat dengan parameter di bawah ini.
- Kredensial token - Mewakili kredensial yang mampu menyediakan token OAuth.
- Host - nama host namespace tingkat Azure Bus Layanan Premium.
- Tas properti ServiceBusJms Koneksi ionFactory Pengaturan, yang berisi
- connectionIdleTimeoutMS - waktu koneksi iddle dalam milidetik.
- traceFrames - bendera boolean untuk mengumpulkan bingkai jejak AMQP untuk debugging.
- parameter konfigurasi lainnya
Pabrik dapat dibuat seperti yang ditunjukkan di sini. Kredensial token dan host diperlukan parameter, tetapi properti lainnya bersifat opsional.
String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null);
Tujuan JMS
Tujuan adalah objek yang digunakan klien untuk menentukan target pesan yang dihasilkannya dan sumber pesan yang digunakannya.
Tujuan memetakan ke entitas di Azure Service Bus - antrean (dalam skenario point to point) dan topik (dalam skenario pub-sub).
Koneksi
Koneksi merangkum koneksi virtual dengan penyedia JMS. Dengan Azure Bus Layanan, ini mewakili koneksi stateful antara aplikasi dan Azure Bus Layanan melalui AMQP.
Koneksi dibuat dari pabrik koneksi seperti yang ditunjukkan dalam contoh berikut:
Connection connection = factory.createConnection();
Sesi
Sesi adalah konteks berulir tunggal untuk menghasilkan dan mengkonsumsi pesan. Ini dapat digunakan untuk membuat pesan, produsen pesan dan konsumen, tetapi juga menyediakan konteks transaksional untuk memungkinkan pengelompokan pengiriman dan menerima ke dalam unit kerja atom.
Sesi dapat dibuat dari objek koneksi seperti yang ditunjukkan dalam contoh berikut:
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Catatan
JMS API tidak mendukung penerimaan pesan dari antrean atau topik bus layanan dengan sesi olahpesan diaktifkan.
Mode sesi
Sesi dapat dibuat dengan salah satu mode di bawah ini.
Mode sesi | Perilaku |
---|---|
Session.AUTO_ACKNOWLEDGE | Sesi secara otomatis mengakui penerimaan klien atas pesan baik ketika sesi telah berhasil kembali dari panggilan untuk menerima atau ketika pendengar pesan, sesi telah menelepon untuk memproses pesan berhasil kembali. |
Session.CLIENT_ACKNOWLEDGE | Klien mengakui pesan yang digunakan dengan memanggil metode pengakuan pesan. |
Session.DUPS_OK_ACKNOWLEDGE | Mode pengakuan ini menginstruksikan sesi untuk dengan malas mengakui pengiriman pesan. |
Session.SESSION_TRANSACTED | Nilai ini dapat diteruskan sebagai argumen ke metode createSession(int sessionMode) pada objek Connection untuk menentukan bahwa sesi harus menggunakan transaksi lokal. |
Saat mode sesi tidak ditentukan, Session.AUTO_ACKNOWLEDGE dipilih secara default.
JMSContext
Catatan
JMSContext didefinisikan sebagai bagian dari spesifikasi JMS 2.0.
JMSContext menggabungkan fungsionalitas yang disediakan oleh koneksi dan objek sesi. Ini dapat dibuat dari objek pabrik koneksi.
JMSContext context = connectionFactory.createContext();
Mode JMSContext
Sama seperti objek Sesi, JMSContext dapat dibuat dengan mode pengakuan yang sama seperti yang disebutkan dalam mode Sesi.
JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);
Saat mode tidak ditentukan, JMSContext.AUTO_ACKNOWLEDGE dipilih secara default.
Produsen pesan JMS
Produsen pesan adalah objek yang dibuat menggunakan JMSContext atau Sesi dan digunakan untuk mengirim pesan ke tujuan.
Ini dapat dibuat baik sebagai objek berdiri sendiri seperti yang ditunjukkan dalam contoh berikut:
JMSProducer producer = context.createProducer();
Atau dibuat pada runtime saat pesan perlu dikirim.
context.createProducer().send(destination, message);
Konsumen pesan JMS
Konsumen pesan adalah objek yang dibuat oleh JMSContext atau Sesi dan digunakan untuk menerima pesan yang dikirim ke tujuan. Ini dapat dibuat seperti yang ditunjukkan dalam contoh ini:
JMSConsumer consumer = context.createConsumer(dest);
Sinkron diterima melalui metode receive()
Konsumen pesan menyediakan cara sinkron untuk menerima pesan dari tujuan melalui metode receive()
.
Jika tidak ada argumen/timeout yang ditentukan atau batas waktu '0' ditentukan, maka konsumen memblokir tanpa batas waktu kecuali pesan tiba, atau koneksi rusak (mana yang lebih awal).
Message m = consumer.receive();
Message m = consumer.receive(0);
Ketika argumen positif bukan nol disediakan, konsumen memblokir hingga timer tersebut kedaluwarsa.
Message m = consumer.receive(1000); // time out after one second.
Asinkron menerima dengan pendengar pesan JMS
Pendengar pesan adalah objek yang digunakan untuk penanganan pesan secara asinkron di suatu tujuan. Ini mengimplementasikan MessageListener
antarmuka, yang berisi onMessage
metode di mana logika bisnis tertentu harus hidup.
Objek pendengar pesan harus digunakan dan didaftarkan terhadap konsumen pesan tertentu menggunakan metode setMessageListener
ini.
Listener myListener = new Listener();
consumer.setMessageListener(myListener);
Mengkonsumsi dari topik
Konsumen Pesan JMS dibuat terhadap tujuan, yang dapat menjadi antrean atau topik.
Konsumen yang mengantre hanyalah objek sampingan klien yang hidup dalam konteks Sesi (dan Koneksi) antara aplikasi klien dan Azure Service Bus.
Konsumen tentang topik, bagaimanapun, memiliki 2 bagian -
- Objek sisi klien yang hidup dalam konteks Sesi(atau JMSContext), dan,
- Langganan yang merupakan entitas di Azure Service Bus.
Langganan didokumentasikan di sini dan bisa menjadi salah satu langganan berikut:
- Langganan bersama yang tahan lama
- Langganan bersama yang tidak tahan lama
- Langganan privat yang tahan lama
- Langganan privat yang tidak tahan lama
Browser Antrean JMS
JMS API menyediakan objek QueueBrowser
yang memungkinkan aplikasi untuk menelusuri pesan dalam antrean dan menampilkan nilai header untuk setiap pesan.
Browser Antrean dapat dibuat menggunakan JMSContext seperti dalam contoh berikut:
QueueBrowser browser = context.createBrowser(queue);
Catatan
JMS API tidak menyediakan API untuk menelusuri topik.
Ini karena topik itu sendiri tidak menyimpan pesan. Segera setelah pesan dikirim ke topik, pesan diteruskan ke langganan yang sesuai.
Pemilih Pesan JMS
Pemilih pesan dapat digunakan dengan menerima aplikasi untuk memfilter pesan yang diterima. Dengan pemilih pesan, aplikasi penerima membongkar pekerjaan pemfilteran pesan ke penyedia JMS (dalam hal ini, Azure Service Bus) alih-alih mengambil tanggung jawab itu sendiri.
Pemilih dapat digunakan saat membuat salah satu konsumen di bawah ini -
- Langganan bersama yang tahan lama
- Langganan privat yang tahan lama
- Langganan bersama yang tidak tahan lama
- Langganan privat yang tidak tahan lama
- Browser antrean
Disposisi AMQP dan pemetaan operasi Service Bus
Inilah cara disposisi AMQP diterjemahkan menjadi operasi 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()
Ringkasan
Panduan developer ini memamerkan bagaimana aplikasi klien Java menggunakan Java Message Service (JMS) dapat terhubung dengan Azure Service Bus.
Langkah berikutnya
Untuk informasi selengkapnya tentang Azure Bus Layanan dan detail tentang entitas Java Message Service (JMS), lihat artikel berikut ini:
- Azure Service Bus - Antrean, Topik, dan Langganan
- Azure Service Bus - Entitas Java Message Service
- Dukungan AMQP 1.0 di Azure Service Bus
- Panduan Pengembang Azure Service Bus AMQP 1.0
- Mulai menggunakan antrean Service Bus
- Java Message Service API (dokumen Oracle eksternal)
- Pelajari cara bermigrasi dari ActiveMQ ke Azure Service Bus