riane5 opened a new issue, #736:
URL: https://github.com/apache/rocketmq-spring/issues/736

   ## 版本
   
   - rocketmq-spring-boot-starter:2.2.1
   - rocketmq-client:4.9.2 
   
   ## 问题
   - 采用 `@RocketMQMessageListener` 注解 广播 消费时,查看本地生成的rocketmq_client.log发现如下错误
    
   
![Image](https://github.com/user-attachments/assets/a5a87ba6-cf27-4949-89f2-5f82c253aba7)
   - `java.io.FileNotFoundException: 
.\logs\rocketmq\offset\[email protected]:10111@11716@541846349141899\123_memory_consumer\offsets.json.tmp
 (文件名、目录名或卷标语法不正确。)`
   
   - window环境下,文件夹名称带有冒号导致创建不了文件,就会一直报错
   
   
   ##  原因分析
   - 
`org.apache.rocketmq.client.consumer.store.LocalFileOffsetStore`类生成本地文件路径的代码如下:
   ``` java
       public LocalFileOffsetStore(MQClientInstance mQClientFactory, String 
groupName) {
           this.mQClientFactory = mQClientFactory;
           this.groupName = groupName;
           this.storePath = LOCAL_OFFSET_STORE_DIR + File.separator +
               this.mQClientFactory.getClientId() + File.separator +
               this.groupName + File.separator +
               "offsets.json";
       }
   ```
   
   - 
会用到clientId,而clientId的生成逻辑(`org.apache.rocketmq.client.ClientConfig#buildMQClientId`)如下
   ``` java
       public String buildMQClientId() {
           StringBuilder sb = new StringBuilder();
           sb.append(this.getClientIP());
   
           sb.append("@");
           sb.append(this.getInstanceName());
           if (!UtilAll.isBlank(this.unitName)) {
               sb.append("@");
               sb.append(this.unitName);
           }
   
           return sb.toString();
       }
   ``` 
   
   - 
核心问题出现在方法`org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer#initRocketMQPushConsumer`内部,会给消费者初始化
 instanceName
      - ` consumer.setInstanceName(RocketMQUtil.getInstanceName(nameServer));`
      - 此方法传入的是nameServer 带有IP或者域名以及冒号加端口号


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to