
go-micro 无法自动发现服务
在使用 go-micro 构建分布式微服务时,遇到无法自动发现服务的问题。以下问题描述和答案将帮助攻克此难题:
环境:
- go 1.14.7
- go-micro v2
- centos 7
现象:
在关闭防火墙的情况下,服务运行正常。但是,一旦开启防火墙,节点无法被发现,服务不可用。
测试方法:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
必要的端口已添加到防火墙规则:
- firewall-cmd --zone=public --add-port=5672/tcp --permanent
- firewall-cmd --zone=public --add-port=5672/udp --permanent
防火墙和服务器已重启,但问题依然存在。
解决方案:
发现问题的根源在于 centos 7 中防火墙和 iptables 之间的一个坑。iptables 的规则链影响了服务发现机制。通过以下步骤解决了问题:
- 清除 iptables 规则:
/etc/firewalld/direct-table-manager iptables -f /etc/firewalld/direct-table-manager
- 重新加载防火墙:
systemctl restart firewalld
- 将必要的端口添加到防火墙规则:
- firewall-cmd --add-port=5672/tcp --permanent
- firewall-cmd --add-port=5672/udp --permanent
- 重新加载防火墙:
systemctl restart firewalld
经过上述步骤,go-micro 能够自动发现服务,问题得以解决。

















