广播消费模式下,本地offsets.json.temp创建失败
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 55/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- java, spring-boot
- 领域
- backend
调研方向
从 DefaultRocketMQListenerContainer#initRocketMQPushConsumer 和对 RocketMQUtil.getInstanceName(nameServer) 的调用开始,然后追踪 ClientConfig#buildMQClientId 如何影响 LocalFileOffsetStore 的 storePath。检查 nameserver 包含冒号时生成的路径在 Windows 上的行为。当广播消费者能够创建 offsets.json.tmp 且不再出现报告的 FileNotFoundException 时,即视为完成。
由索引模型根据 Issue 内容生成。
描述
版本
- rocketmq-spring-boot-starter:2.2.1
- rocketmq-client:4.9.2
问题
- 采用
@RocketMQMessageListener注解 广播 消费时,查看本地生成的rocketmq_client.log发现如下错误
-
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类生成本地文件路径的代码如下:
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)如下
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内部,会给消费者初始化 instanceNameconsumer.setInstanceName(RocketMQUtil.getInstanceName(nameServer));- 此方法传入的是nameServer 带有IP或者域名以及冒号加端口号
- 主要语言
- Java
- 星标
- 2.3k
- 派生
- 941
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
apache/rocketmq-spring 的其他 Issue
-
[Bug] RocketMQClientTemplate.receiveAsync closes the shared SimpleConsumer, breaking all subsequent operations可能已有人在做 @wang-jiahua 于 62 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 88/100
apache/rocketmq-spring#780 · 3 条评论 ·
-
编译报错未关闭
难度 2/5 1-3 小时 新手友好度 72/100
apache/rocketmq-spring#692 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 68/100
apache/rocketmq-spring#678 · 2 条评论 ·
-
难度 1/5 1 小时以内 新手友好度 82/100
apache/rocketmq-spring#670 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 62/100
apache/rocketmq-spring#609 · 3 条评论 ·
查看 apache/rocketmq-spring 的全部 Issue
相似的 Issue
-
needs-area-label
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 2 天内回复
-
enhancement Java macOS
难度 2/5 1-3 小时 新手友好度 78/100
freerouting/freerouting#1079 ·
维护者通常 4 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
apache/maven-enforcer#1074 ·
维护者通常 1 天内回复
-
Gradle liquibaseDiffChangelog drops jhi_date_time_wrapper可能已有人在做 @mraible 今天认领。 未关闭area: triage theme: undefined
难度 2/5 1-3 小时 新手友好度 88/100
jhipster/generator-jhipster#35998 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
openai/openai-java#1337 ·
维护者通常 1 天内回复