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 ConnectionFactoryantarmuka , , QueueConnectionFactoryatau TopicConnectionFactory .

Untuk menyederhanakan koneksi dengan Azure Bus Layanan, antarmuka ini diimplementasikan melalui ServiceBusJmsConnectionFactory, , ServiceBusJmsQueueConnectionFactoryatau 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.

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: