全部產品
Search
文件中心

:如何排查通過SDK接入雲訊息佇列RocketMQ版時報錯No route info的問題?

更新時間:Dec 24, 2025

情境描述

通過RocketMQ SDK接入雲訊息佇列 RocketMQ 版時報錯No route info。

適用SDK

  • 商業版 HTTP SDK(僅訊息佇列RocketMQ 4.0系列執行個體支援。詳見各版本SDK說明

  • 商業版1.x SDK(Java, Remoting協議),依賴座標範例(商業版SDK版本必須大於1.7.9):

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>ons-client</artifactId>
        <version>1.9.1.Final</version>
    </dependency>
  • 開源SDK(Java,Remoting協議,artifactId為rocketmq-client),依賴範例座標(開源SDK版本必須大於4.5.2,請檢查代碼配置和SDK版本):

    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>4.9.2</version>
    </dependency>

簡要排查思路

根據執行個體系列以及SDK協議、語言的不同組合,會有不同的排查方式,需要根據具體情境進行排查。

排查詳情

HTTP協議SDK

  1. 核實代碼中配置的存取點與需要接入的目標執行個體的控制台顯示的存取點是否一致,一致的話檢查Topic是否建立。

  2. 檢查執行個體詳情頁是否存在命名空間,有命名空間的執行個體的生產/消費代碼中需要配置 instanceId,詳見程式碼範例。無命名空間執行個體instanceId則需要傳入null空值或字串空值。

    image

TCP Remoting協議 SDK

  1. 確認報錯no router info的資源是否為TBW102或者RMQ_SYS_TRACE_TOPIC

    1. TBW102:是開源RocketMQ用來自動建立Topic使用的,雲訊息佇列 RocketMQ 版的Topic是管控資源,無法自動建立,且TBW102不會影響用戶端正常使用,可以忽略。

    2. RMQ_SYS_TRACE_TOPIC:開源RocketMQ用來上報訊息軌跡的Topic,在接入雲訊息佇列 RocketMQ 版需要配置雲上軌跡相容,開源Remoting協議SDK(artifactId為rocketmq-client)可以通過以下方式配置,詳見收發普通訊息(三種方式)

      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");
          //阿里雲上訊息軌跡需要設定為CLOUD方式,在使用雲上訊息軌跡的時候,需要設定此項,如果不開啟訊息軌跡功能,則運行不設定此項。
          consumer.setAccessChannel(AccessChannel.CLOUD);
          ......
          consumer.start();
        }
  2. 核實代碼中配置的存取點與需要接入的目標執行個體的控制台顯示的存取點是否一致,一致的話檢查Topic是否建立。

  3. 在Java Remoting協議用戶端,可以查看用戶端日誌中是否存在網路連接異常,日誌路徑:

    • 開源社區Java SDK路徑/{user.home}/logs/rocketmqlogs/rocketmq_client.log

    • 商業1.x版本路徑 /{user.home}/logs/ons.log

    如果日誌中存在網路連接異常問題需要先保證網路暢通,可以通過ping以及telnet命令來檢測。需要注意這裡不能僅通過telnet測試與存取點的網路連接,還需要看日誌中報錯的地址是什麼,然後通過telnet測試與日誌中報錯地址的網路連接。

  4. 查看日誌中是否存在鑒權失敗問題,若存在鑒權失敗問題需要先解決許可權問題然後再查看是否還有報錯。

  5. 核實是否有使用spring-cloud-stream架構,詳見配置說明

    • 如果執行個體詳情頁存在命名空間,則Topic需要配置執行個體id%Topic

    • 如果執行個體詳情頁不存在命名空間,則配置Topic名稱即可。判斷執行個體是否存在命名空間可參考HTTP協議SDK中的說明。

  6. 核實是否通過公網接入Serverless執行個體。

    • 通過公網接入Serverless執行個體需要使用指定版本的SDK以及設定命名空間。

    • 通過內網接入Serverless執行個體,或者通過公網/內網接入其他類型的5.0系列執行個體則不需要設定命名空間。

      // SDK版本支援:rocketmq-client >= 5.2.0版
      producer.setNamespaceV2("rmq-cn-xxxxxxx");
      consumer.setNamespaceV2("rmq-cn-xxxxxxx");
      // SDK版本支援:rocketmq-client-java >= 5.0.6版
      StaticSessionCredentialsProvider staticSessionCredentialsProvider =
                          new StaticSessionCredentialsProvider("存取控制頁擷取使用者資訊", “存取控制頁擷取”);  //在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");