Skenario
Error "No route info" muncul saat Anda menghubungkan ke ApsaraMQ for RocketMQ menggunakan SDK.
SDK yang Berlaku
Commercial HTTP SDK. SDK ini hanya didukung oleh instans seri ApsaraMQ for RocketMQ 4.0. Untuk informasi selengkapnya, lihat Ikhtisar versi SDK.
Commercial 1.x SDK (Java, protokol Remoting). Kode berikut menyediakan koordinat dependensi contoh. Versi Commercial SDK harus 1.7.9 atau lebih baru.
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>ons-client</artifactId> <version>1.9.1.Final</version> </dependency>Open source SDK (Java, protokol Remoting, dengan artifactId rocketmq-client). Kode berikut menyediakan koordinat dependensi contoh. Versi open source SDK harus 4.5.2 atau lebih baru. Periksa konfigurasi kode dan versi SDK Anda.
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.9.2</version> </dependency>
Rangkuman Pemecahan Masalah
Metode pemecahan masalah bervariasi tergantung pada edisi instans, protokol SDK, dan bahasa pemrograman. Ikuti petunjuk yang sesuai dengan skenario spesifik Anda.
Detail Pemecahan Masalah
HTTP protocol SDK
Verifikasi bahwa endpoint dalam kode Anda sesuai dengan endpoint yang ditampilkan di Konsol untuk instans target. Jika sudah sesuai, pastikan topik telah dibuat.
Periksa halaman detail instans untuk menentukan apakah namespace digunakan. Jika instans menggunakan namespace, konfigurasikan `instanceId` dalam kode produsen dan konsumen Anda. Untuk informasi selengkapnya, lihat Contoh kode. Jika instans tidak menggunakan namespace, berikan nilai null atau string kosong untuk `instanceId`.

TCP Remoting protocol SDK
Konfirmasi apakah resource yang melaporkan error
no router infoadalahTBW102atauRMQ_SYS_TRACE_TOPIC.TBW102: Resource ini digunakan oleh open source RocketMQ untuk pembuatan topik otomatis. Di ApsaraMQ for RocketMQ, topik merupakan resource yang dikelola dan tidak dapat dibuat secara otomatis. Error TBW102 tidak memengaruhi operasi client dan dapat diabaikan.
RMQ_SYS_TRACE_TOPIC: Topik ini digunakan oleh open source RocketMQ untuk melaporkan jejak pesan. Saat Anda menghubungkan ke ApsaraMQ for RocketMQ, Anda harus mengonfigurasi kompatibilitas untuk jejak berbasis cloud. Konfigurasikan open source Remoting protocol SDK (dengan artifactId rocketmq-client) sebagai berikut. Untuk informasi selengkapnya, lihat Kirim dan terima pesan normal (tiga metode).
public static void main(String[] args) throws MQClientException { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("YOUR GROUP ID", getAclRPCHook(), new AllocateMessageQueueAveragely(), true, null); consumer.setNamesrvAddr("http://xxxx.mq-internet.aliyuncs.com:80"); // Untuk menggunakan jejak pesan berbasis cloud di Alibaba Cloud, atur access channel ke CLOUD. // Atur parameter ini jika Anda menggunakan fitur jejak pesan berbasis cloud. // Jika Anda tidak mengaktifkan fitur ini, Anda tidak perlu mengatur parameter ini. consumer.setAccessChannel(AccessChannel.CLOUD); ...... consumer.start(); }
Verifikasi bahwa endpoint dalam kode Anda sesuai dengan endpoint yang ditampilkan di Konsol untuk instans target. Jika sudah sesuai, pastikan topik telah dibuat.
Untuk client Java dengan protokol Remoting, periksa log client untuk menemukan exception koneksi jaringan. Lokasi log adalah:
Jalur Open source Java SDK:
/{user.home}/logs/rocketmqlogs/rocketmq_client.logJalur edisi Commercial 1.x:
/{user.home}/logs/ons.log.
Jika log menunjukkan masalah konektivitas jaringan, pastikan terlebih dahulu bahwa jaringan dapat diakses. Anda dapat menggunakan perintah
pingdantelnetuntuk menguji koneksi. Selain menguji endpoint, gunakan juga perintah `telnet` untuk menguji konektivitas ke alamat yang dilaporkan dalam error log.Periksa log untuk kegagalan otorisasi. Jika terjadi kegagalan otorisasi, selesaikan masalah izin terlebih dahulu, lalu periksa apakah error masih berlanjut.
Untuk instans seri 4.0, lihat Kebijakan kustom untuk ApsaraMQ for RocketMQ. Saat memberikan izin, pilih kebijakan yang sesuai berdasarkan apakah instans menggunakan namespace.
Untuk instans seri 5.0, berikan izin ACL yang diperlukan. Untuk informasi selengkapnya, lihat Berikan izin kepada pengguna ACL. Untuk menentukan apakah instans menggunakan namespace, lihat petunjuk di bagian HTTP protocol SDK.
Verifikasi apakah Anda menggunakan framework spring-cloud-stream. Untuk informasi selengkapnya, lihat Petunjuk konfigurasi.
Jika instans menggunakan namespace, konfigurasikan topik dalam format
instanceId%Topic.Jika instans tidak menggunakan namespace, konfigurasikan hanya nama topik. Untuk menentukan apakah instans menggunakan namespace, lihat petunjuk di bagian HTTP protocol SDK.
Verifikasi apakah Anda menghubungkan ke instans Serverless melalui jaringan publik.
Untuk menghubungkan ke instans Serverless melalui jaringan publik, Anda harus menggunakan versi SDK tertentu dan mengatur namespace.
Anda tidak perlu mengatur namespace jika menghubungkan ke instans Serverless melalui jaringan internal, atau jika menghubungkan ke jenis instans seri 5.0 lainnya melalui jaringan publik maupun internal.
// Versi SDK yang didukung: rocketmq-client >= 5.2.0 producer.setNamespaceV2("rmq-cn-xxxxxxx"); consumer.setNamespaceV2("rmq-cn-xxxxxxx"); // Versi SDK yang didukung: rocketmq-client-java >= 5.0.6 StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider("YOUR_USERNAME", "YOUR_PASSWORD"); // Dapatkan username dan password dari halaman Access Control di Konsol ApsaraMQ for RocketMQ. ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints("rmq-cn-xxxxxxx.cn-hangzhou.rmq.aliyuncs.com:8080") .setNamespace("rmq-cn-xxxxxxx") .setCredentialProvider(staticSessionCredentialsProvider) .build(); // ons >= 1.9.0.Final properties.setProperty(PropertyKeyConst.Namespace, "rmq-cn-xxxxxxx");