Bagikan melalui


Panduan pengembang 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 Service Bus, pertimbangkan untuk membaca artikel berikut.

Memulai Langkah Pertama Konsep

Model Pemrograman Java Message Service (JMS)

Model pemrograman API Java Message Service seperti yang ditunjukkan di bagian berikut:

Nota

Tingkat Azure Service Bus Premium mendukung JMS 1.1 dan JMS 2.0.

Azure Service Bus - Tingkat standar mendukung fungsionalitas JMS 1.1 terbatas. Untuk detail selengkapnya, lihat dokumentasi ini.

JMS - Blok penyusun

Blok penyusun di bawah ini tersedia untuk berkomunikasi dengan aplikasi JMS.

Nota

Panduan di bawah ini telah diadaptasi dari Tutorial Oracle Java EE 6 untuk Java Message Service (JMS)

Mengacu pada tutorial ini direkomendasikan untuk pemahaman yang lebih baik tentang Java Message Service (JMS).

Fasilitas koneksi

Objek pabrik koneksi digunakan oleh klien untuk terhubung dengan penyedia JMS. Pabrik koneksi merangkum sekumpulan parameter konfigurasi koneksi yang ditentukan oleh administrator.

Setiap pabrik koneksi adalah sebuah instans dari antarmuka ConnectionFactory, QueueConnectionFactory, atau TopicConnectionFactory.

Untuk menyederhanakan koneksi dengan Azure Service Bus, antarmuka ini diimplementasikan melalui ServiceBusJmsConnectionFactory, ServiceBusJmsQueueConnectionFactory, atau ServiceBusJmsTopicConnectionFactory masing-masing.

Penting

Aplikasi Java yang memanfaatkan API JMS 2.0 dapat terhubung ke Azure Service Bus menggunakan string koneksi, atau menggunakan untuk memanfaatkan autentikasi TokenCredential 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 kemudian dapat diinstansiasi dengan parameter di bawah ini.

  • Kredensial token - Mewakili kredensial yang mampu menyediakan token OAuth.
  • Host - nama host namespace layanan tingkat Azure Service Bus Premium.
  • Tas properti ServiceBusJmsConnectionFactorySettings, yang berisi
    • connectionIdleTimeoutMS - batas waktu koneksi diam dalam milidetik.
    • traceFrames - penanda boolean untuk mengumpulkan frame jejak AMQP untuk penelusuran kesalahan.
    • 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 dipetakan menjadi entitas di Azure Service Bus - antrean (dalam skenario langsung) dan topik (dalam skenario pub-sub).

Koneksi

Koneksi menggambarkan hubungan virtual dengan penyedia JMS. Dengan Azure Service Bus, ini mewakili koneksi stateful antara aplikasi dan Azure Service Bus melalui AMQP.

Koneksi dibuat dari pabrik koneksi seperti yang ditunjukkan dalam contoh berikut:

Connection connection = factory.createConnection();

Sesi

Sesi adalah konteks utas tunggal untuk menghasilkan dan mengonsumsi pesan. Ini dapat digunakan untuk membuat pesan, produsen pesan, dan konsumen, tetapi juga menyediakan konteks transaksional untuk memungkinkan pengelompokan pengiriman dan penerimaan ke dalam unit kerja atomik.

Sesi dapat dibuat dari objek koneksi seperti yang ditunjukkan dalam contoh berikut:

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

Nota

JMS API tidak mendukung menerima pesan dari antrean atau topik bus layanan dengan sesi pengiriman pesan diaktifkan.

Mode sesi

Sesi dapat dibuat dengan salah satu mode di bawah ini.

Mode sesi Perilaku
Session.AUTO_ACKNOWLEDGE Sesi secara otomatis mengakui penerimaan pesan klien baik ketika sesi berhasil dikembalikan dari panggilan untuk menerima atau ketika pendengar pesan yang dipanggil sesi untuk memproses pesan berhasil dikembalikan.
Session.CLIENT_ACKNOWLEDGE Klien mengakui pesan yang telah diproses dengan memanggil metode acknowledge dari 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 Koneksi untuk menentukan bahwa sesi harus menggunakan transaksi lokal.

Saat mode sesi tidak ditentukan, Session.AUTO_ACKNOWLEDGE dipilih secara default.

JMSContext

Nota

JMSContext didefinisikan sebagai bagian dari spesifikasi JMS 2.0.

JMSContext menggabungkan fungsionalitas yang disediakan oleh objek koneksi dan 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 (Java Message Service)

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

Penerimaan sinkron melalui metode receive()

Konsumen pesan menyediakan cara yang sinkron untuk menerima pesan dari tujuan melalui metode receive().

Jika tidak ada argumen/batas waktu yang ditentukan atau batas waktu '0' ditentukan, maka konsumen memblokir tanpa batas waktu kecuali pesan tiba, atau koneksi rusak (mana pun 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.

Penerimaan asinkron dengan pendengar pesan JMS

Pendengar pesan adalah objek yang digunakan untuk penanganan pesan asinkron di tujuan. Ini mengimplementasikan MessageListener antarmuka, yang berisi onMessage metode di mana logika bisnis tertentu harus hidup.

Objek pendengar pesan harus diinstansiasi dan didaftarkan terhadap konsumen pesan tertentu menggunakan metode setMessageListener.

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

Mengkonsumsi dari topik

Konsumen Pesan JMS dibuat terhadap destinasi, yang dapat berupa antrean atau topik.

Konsumen pada antrean hanyalah objek sisi klien yang hidup dalam konteks Sesi (dan Koneksi) antara aplikasi klien dan Azure Service Bus.

Topik konsumsi, bagaimanapun, terbagi menjadi 2 bagian -

  • Objek sisi klien yang berada dalam konteks Session(atau JMSContext), dan,
  • Langganan sebagai 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 yang tidak dibagikan dan tidak bersifat tetap

Browser Antrean JMS

JMS API menyediakan QueueBrowser objek yang memungkinkan aplikasi 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);

Nota

JMS API tidak menyediakan API untuk menelusuri topik.

Ini karena topik itu sendiri tidak menyimpan pesan. Segera setelah pesan dikirim ke topik tersebut, 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 melepaskan pekerjaan pemfilteran pesan ke penyedia JMS (dalam hal ini, Azure Service Bus) daripada mengambil tanggung jawab itu sendiri.

Pemilih dapat digunakan saat membuat salah satu konsumen di bawah ini -

  • Langganan bersama yang tahan lama
  • Langganan tahan lama yang tidak dibagikan
  • Langganan bersama yang tidak tahan lama
  • Langganan tidak berkelanjutan yang tidak dibagikan
  • Penerima antrean
  • Browser antrean

Nota

Selektor Layanan Bus tidak mendukung kata kunci SQL "LIKE" dan "BETWEEN".

Disposisi AMQP dan pemetaan operasi Service Bus

Berikut adalah bagaimana disposisi AMQP diterjemahkan ke operasi Bus Layanan:

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 pengembang ini menampilkan bagaimana aplikasi klien Java yang menggunakan Java Message Service (JMS) dapat terhubung dengan Azure Service Bus.

Langkah berikutnya

Untuk informasi selengkapnya tentang Azure Service Bus dan detail tentang entitas Java Message Service (JMS), lihat artikel berikut ini: