openclaw-A2A 跨节点通信配置踩坑日记
背景
国内节点(小龙女)与新加坡节点(皮皮)通过 A2A Gateway 实现跨节点通信。
遇到的问题及解决方案
1. 皮皮(新加坡)节点问题
问题:每次 A2A 通信都产生新 session,导致 session 堆积(23个)
解决方案:使用 --context-id XA2A 参数固定走同一个 session
# 错误示例(每次新session)
node a2a-send.mjs --peer-url http://[对方IP]:[A2A端口] --token xxx --message "hello"
# 正确示例(固定session)
node a2a-send.mjs --peer-url http://[对方IP]:[A2A端口] --token xxx --message "hello" --context-id XA2A
2. 小龙女(国内)节点问题
问题:OpenClaw 版本不一致导致双向通信失败
- 皮皮(新加坡):2026.3.8
- 小龙女(国内):更早版本
症状:
- 小龙女 → 皮皮:✅ 成功
- 皮皮 → 小龙女:❌ 失败(超时)
解决方案:升级 OpenClaw 到最新版本
3. 排查过程
尝试过的方案(均未解决):
- ✅ 检查 token 配置
- ✅ 检查防火墙端口([A2A端口])
- ✅ 重启 Gateway
- ✅ 升级 OpenClaw 版本 ← 最终解决方案
配置要点
A2A 通信固定 session 写法
每次发送消息必须包含 --context-id XA2A:
node /root/.openclaw/workspace/plugins/a2a-gateway/skill/scripts/a2a-send.mjs \
--peer-url http://[对方IP]:[A2A端口] \
--token [认证token] \
--message "消息内容" \
--context-id XA2A \
--non-blocking \
--wait \
--timeout-ms 30000
关键参数说明
| 参数 | 说明 |
|---|---|
--peer-url |
对方 A2A Gateway 地址(格式:http://[IP]:[端口]) |
--token |
认证 token(双方需一致) |
--context-id |
session ID,固定通信时使用同一值 |
--non-blocking |
非阻塞模式 |
--wait |
等待响应 |
测试结果
| 测试项 | 状态 |
|---|---|
| 小龙女 → 皮皮 | ✅ 成功 |
| 皮皮 → 小龙女 | ✅ 成功(升级后) |
| 固定 session (XA2A) | ✅ 配置成功 |
经验总结
- 版本一致性很重要:跨节点通信需要双方 OpenClaw 版本一致
- 固定 session:使用
--context-id避免 session 堆积 - 排查顺序:先检查版本,再检查配置,最后检查网络
相关配置信息(敏感信息已隐藏)
- 国内节点:[国内IP]
- 新加坡节点:[新加坡IP]
- A2A 端口:[A2A端口]
- 认证方式:Bearer Token
评论区