Corda 3.1节点用主机名做p2pAddress出现端点错误问题咨询
解决Corda 3.1使用主机名作为p2pAddress的交易报错问题
当然可以用主机名啦!你遇到的Message for incorrect endpoint错误,本质是节点P2P通信时的地址匹配不一致导致的——虽然节点能正常启动,但交易时节点之间的地址验证通不过。针对你的AWS负载均衡场景,咱们一步步调整配置来解决:
1. 给节点添加公开地址声明
Corda节点默认会把自己监听的实际地址告诉其他节点,但如果你的节点藏在负载均衡后面,得明确告诉其他节点你的公开访问地址(也就是负载均衡的hostname)。修改你的node.conf,添加advertisedServices配置:
myLegalName : "O=Bank A,L=London,C=GB" p2pAddress : "my-load-balancer-hostname.aws.com:10002" # 新增这部分,明确对外声明的P2P地址 advertisedServices = { p2p = "my-load-balancer-hostname.aws.com:10002" } rpcSettings = { address : "localhost:10003" adminAddress : "localhost:10004" } rpcUsers : [ { username=user1, password=test, permissions=[ ALL ] } ] devMode : true
这个配置会让节点对外发送的所有P2P消息里,都用负载均衡hostname作为自己的地址,避免其他节点收到消息后发现地址不匹配。
2. 检查AWS负载均衡的关键配置
- 确保负载均衡的后端目标组是TCP协议(Corda P2P用TCP而非HTTP),并且正确指向节点的
10002端口。 - 关掉负载均衡的会话粘性,Corda节点之间的P2P连接是动态建立的,不需要固定会话绑定。
- 确认负载均衡的安全组允许所有参与交易的节点双向访问
10002端口,别把流量拦下来了。
3. 验证所有节点的hostname解析一致
在每一个要参与交易的Corda节点上,跑一下这个命令验证hostname解析:
nslookup my-load-balancer-hostname.aws.com
要保证所有节点解析出来的都是负载均衡的前端IP,这样流量才能先到负载均衡,再转发到你的节点。
4. 证书配置检查(可选)
如果你的节点用了自定义证书,得确保证书的subjectAltName字段包含这个负载均衡hostname,不然可能会触发TLS握手失败(虽然你现在的错误是端点不匹配,但证书问题也可能间接引发类似故障)。
至于为什么用IP能正常工作?很简单——当你把p2pAddress设为节点的实际IP时,所有节点解析到的地址就是节点直接监听的IP,不存在地址映射的偏差,自然能通过端点验证,交易也就正常了。
内容的提问来源于stack exchange,提问作者gaugfather
相关产品推荐
相关产品推荐

