全部产品
Search
文档中心

:Catatan Rilis untuk SDK Java

更新时间:Dec 09, 2025

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

ons-client-2.0.5.Final

2022-08-17

2.0.3.Final

ons-client-2.0.3.Final

2022-06-16

2.0.2.Final

ons-client-2.0.2.Final

2021-11-29

2.0.1.Final

ons-client-2.0.1.Final

2021-10-18

2.0.0.Final

ons-client-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.

    Catatan

    Fitur 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.