Topik ini menjelaskan catatan rilis untuk TCP client SDK Java 2.x.x.Final, termasuk catatan penggunaan, informasi versi, persyaratan lingkungan, dan perubahan fitur.
Catatan Penggunaan
Anda hanya dapat meningkatkan TCP client SDK Java ke V2.x.x.Final di wilayah-wilayah berikut: Tiongkok (Hangzhou), Tiongkok (Qingdao), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Hohhot), Tiongkok (Shenzhen), Tiongkok (Chengdu), Tiongkok (Hong Kong), Jerman (Frankfurt), dan Indonesia (Jakarta). Hindari peningkatan di wilayah lain karena akan menyebabkan ketidakmampuan menggunakan SDK untuk terhubung ke ApsaraMQ for RocketMQ.
TCP client SDK Java 2.x.x.Final hanya dapat digunakan untuk mengakses ApsaraMQ for RocketMQ dalam virtual private cloud (VPC).
Jika Anda menggunakan instance ApsaraMQ for RocketMQ yang ada dan mengaksesnya melalui jaringan klasik, jangan tingkatkan ke versi 2.x.x.Final. Melakukannya akan menyebabkan ketidakmampuan mengakses instance ApsaraMQ for RocketMQ.
TCP client SDK Java 2.x.x.Final hanya mendukung akses ke instance yang memiliki namespace. Jika instance Anda tidak memiliki namespace, hindari peningkatan ke versi ini.
Secara default, semua instance ApsaraMQ for RocketMQ 5.x dilengkapi dengan namespace. Untuk instance ApsaraMQ for RocketMQ 4.x, Anda dapat memeriksa keberadaan namespace di bagian Basic Information pada halaman Instance Details di ApsaraMQ for RocketMQconsole.
Informasi Versi
Tanggal Rilis | Versi | Tautan Unduhan |
2023-02-23 | 2.0.5.Final | |
2022-08-17 | 2.0.3.Final | |
2022-06-16 | 2.0.2.Final | |
2021-11-29 | 2.0.1.Final | |
2021-10-18 | 2.0.0.Final |
Persyaratan Lingkungan
Untuk menggunakan SDK Java V2.x.x, pastikan Anda menggunakan Java Development Kit (JDK) yang mendukung Java 8 atau versi lebih baru.
Perubahan Fitur di V2.0.5
Fitur Dioptimalkan
Dukungan log asinkron telah ditambahkan.
Masalah Diperbaiki
Waktu tunggu untuk konsumsi batch tidak dapat ditentukan.
Kerentanan keamanan tertentu telah diperbaiki.
Perubahan Fitur di V2.0.3
Masalah Diperbaiki
Jumlah thread dalam thread pool tidak dapat ditingkatkan menjadi nilai lebih dari 32 di versi JDK yang lebih baru.
Perubahan Fitur di V2.0.2
Masalah Diperbaiki
Deadlock mungkin terjadi selama pengiriman pesan.
Perubahan Fitur di V2.0.1
Jejak Pesan
Lebih banyak data dikembalikan dalam hasil kueri jejak.
Perubahan Fitur di V2.0.0
Pesan Terurut
Nilai default parameter MaxReconsumeTimes diubah dari Integer.MAX menjadi 16. Parameter ini menentukan jumlah maksimum percobaan ulang untuk pesan terurut. Jika konsumen gagal mengonsumsi pesan setelah mencapai batas maksimum percobaan ulang, pesan tersebut dikirim ke antrian pesan gagal. Anda dapat mengubah nilai parameter MaxReconsumeTimes untuk menyesuaikan jumlah maksimum percobaan ulang untuk pesan terurut.
Pesan Transaksional
Saat produser mengirim pesan, pengecualian dilemparkan jika kelas LocalTransactionExecutor bernilai null. Pengecualian tidak dilemparkan untuk kesalahan ini di versi sebelumnya.
Konsumsi Siaran
Dalam mode konsumsi siaran, Anda dapat memanggil operasi offsetStore untuk menentukan offset konsumen dari mana konsumsi dimulai. Jika Anda tidak menentukan offset konsumen, konsumsi dimulai dari offset konsumen terbaru. Ini sesuai dengan perilaku versi sebelumnya.
Contoh kode:
public class BroadcastingConsumerExample {
public static void main(String[] args) throws InterruptedException {
Properties properties = new Properties();
properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId");
properties.put(PropertyKeyConst.AccessKey, "MyAccessKey");
properties.put(PropertyKeyConst.SecretKey, "MySecretKey");
// Titik akhir TCP. Anda dapat memperoleh titik akhir di bagian TCP Endpoint halaman Detail Instance di Konsol ApsaraMQ for RocketMQ.
properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXXX");
// Anda dapat memperoleh offset konsumen dengan memanggil operasi offsetStore hanya dalam mode konsumsi siaran.
properties.put(PropertyKeyConst.MessageModel, MessageModel.BROADCASTING);
Consumer consumer = ONSFactory.createConsumer(properties);
// Frekuensi pemanggilan metode AbstractOffsetStore. Nilai 1 menentukan bahwa sistem memanggil metode AbstractOffsetStore setiap detik untuk mengatur offset persisten.
OffsetStore offsetStore = new AbstractOffsetStore(1) {
@Override
public Map<TopicPartition, Long> loadOffset() {
// Logika yang digunakan untuk memperoleh offset dari sistem penyimpanan eksternal.
}
@Override
public void persistOffset(Map<TopicPartition, Long> offsetTable) {
// Logika yang digunakan untuk menyimpan offset ke sistem penyimpanan eksternal.
}
};
offsetStore.start();
consumer.setOffsetStore(offsetStore);
consumer.subscribe("testBroadcastingTopic", "TagA", new MessageListener() {
@Override
public Action consume(Message message, ConsumeContext context) {
// Logika yang digunakan untuk mengonsumsi pesan.
return Action.CommitMessage;
}
});
consumer.start();
Thread.sleep(100000);
consumer.shutdown();
offsetStore.shutdown();
}
}Konsumsi dalam Mode Push
Konsumsi batch pesan normal tidak didukung.
Jika jumlah thread konsumsi yang ditentukan tidak berada dalam rentang valid 1 hingga 1.000, sistem melemparkan pengecualian saat Anda membuat konsumen.
Fitur pembatasan konsumsi telah ditambahkan. Anda dapat mengonfigurasi fitur ini untuk membatasi laju konsumsi pesan, membantu mencegah pengecualian aplikasi akibat lonjakan pesan mendadak pada klien konsumen. Kode berikut memberikan contoh cara menentukan laju konsumsi pesan kustom.
CatatanFitur pembatasan konsumsi tidak berlaku untuk percobaan ulang pesan terurut.
public class RateLimitConsumerExample { public static void main(String[] args) throws InterruptedException { Properties properties = new Properties(); properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId"); properties.put(PropertyKeyConst.AccessKey, "MyAccessKey"); properties.put(PropertyKeyConst.SecretKey, "MySecretKey"); // Titik akhir TCP. Anda dapat memperoleh titik akhir di bagian TCP Endpoint halaman Detail Instance di Konsol ApsaraMQ for RocketMQ. properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX"); Consumer consumer = ONSFactory.createConsumer(properties); // Tentukan laju konsumsi pesan di testTopicA. Dalam contoh ini, klien konsumen hanya dapat mengonsumsi 10 pesan per detik. consumer.rateLimit("testTopicA", 10); consumer.subscribe("testTopic", "TagA", new MessageListener() { @Override public Action consume(Message message, ConsumeContext context) { // Logika yang digunakan untuk mengonsumsi pesan. return Action.CommitMessage; } }); consumer.start(); Thread.sleep(100000); consumer.shutdown(); } }
Konsumsi dalam Mode Pull
Konsumsi dalam Mode Pull tidak didukung.
Konfigurasi Log
Path log default diubah dari ~/logs/ons.log menjadi ~/logs/ons/ons-client.log.
Tingkat log kini konsisten dengan framework logback. Tingkat log OFF, TRACE, dan ALL telah ditambahkan. Versi sebelumnya hanya mendukung tingkat log ERROR, WARN, INFO, dan DEBUG.
Variabel lingkungan kini didukung untuk menambahkan parameter terkait log. Versi sebelumnya hanya mendukung
-D.
Pembuatan Klien
Jika titik akhir yang tidak valid ditentukan, pengecualian dilemparkan saat sistem mencoba membuat produser atau konsumen.
Jejak Pesan
Saat menggunakan SDK terbaru untuk mengirim dan menerima pesan, parameter tambahan berikut disertakan dalam hasil kueri jejak.
Parameter | Deskripsi |
AccessKey | ID AccessKey akun Alibaba Cloud Anda atau pengguna Resource Access Management (RAM). ID AccessKey digunakan untuk memverifikasi identitas pengguna. Saat Anda menggunakan SDK atau memanggil operasi API untuk memperoleh sumber daya ApsaraMQ for RocketMQ, ID AccessKey diperlukan untuk otentikasi. |
ReachServer | Waktu ketika pesan tiba di broker ApsaraMQ for RocketMQ. |
PresetDeliverAt | Titik waktu yang dijadwalkan ketika pesan terjadwal akan dikirimkan. |
ActualAvailableAt | Waktu ketika pesan terjadwal dikirimkan. Nilai parameter ini menunjukkan waktu ketika pesan terjadwal siap untuk dikonsumsi. |
Available Time | Waktu ketika pesan siap untuk dikonsumsi. |
Commit/RollbackTime | Waktu ketika pesan transaksional dikomit atau dibatalkan. |
Arrive at Consumer At | Waktu ketika pesan tiba di klien konsumen. |
Wait Duration before Processing | Durasi tunggu antara waktu ketika pesan tiba di klien konsumen dan waktu ketika thread pool mengalokasikan thread dan sumber daya pemrosesan untuk pesan tersebut. |
Masalah Diperbaiki di V2.0.0
Masalah berikut telah diperbaiki: Saat operasi updateCredential dipanggil beberapa kali dalam periode waktu singkat, otorisasi lintas akun untuk peran RAM menggunakan Security Token Service (STS) gagal karena atomicity tidak dijamin saat AccessKey ID, AccessKey secret, dan STS token diperbarui.
Untuk informasi tentang contoh kode SDK untuk otorisasi STS, lihat Langkah 2: Mengakses sumber daya lintas akun Alibaba Cloud.