EurekaNotificationServerListUpdater启用后出现 Connection refused (Connection refused)

优化老项目服务启停导致的调用已停止服务的问题。启用EurekaNotificationServerListUpdater会出现一些问题,以下为跟踪过程以及目前可用的解决办法。

前置环境
springclound+springboot

<version.springboot>1.5.11.RELEASE</version.springboot>
<version.springcloud>Edgware.SR5</version.springcloud>

问题场景
使用EurekaNotificationServerListUpdater,但是在使用过程中,发现一旦启动该类,就会出现服务列表已更新,但是请求还会打到已关闭服务,进而出现问题。

服务A -》eureka-》 服务B (多节点101,102,103)
问题描述:
1.服务A-controller请求多次服务b的服务(正常)

2.关闭某个服务b节点(103),并使用以下代码打出eureka服务清单

public String getServices() {
   
   
		List<String> services = discoveryClient.getServices();

		StringBuilder stringBuilder = new StringBuilder();
		for (String service : services) {
   
   
			List<ServiceInstance
### 关于 `lsnrctl stop` 出现 Connection Refused 的解决方案 当尝试通过命令 `lsnrctl stop` 停止监听器时,如果遇到 `connection refused` 错误,通常表明客户端无法成功连接到监听器进程。以下是可能的原因及其对应的解决方法: #### 1. **确认监听器是否正在运行** 如果监听器未启动,则会返回 `connection refused` 错误。可以通过以下命令检查监听器状态: ```bash lsnrctl status ``` 若显示监听器未运行,则需手动启动它: ```bash lsnrctl start ``` #### 2. **端口冲突或被占用** 监听器默认使用的是 1521 端口。如果有其他程序占用了该端口,可能会导致连接失败。可以尝试重启计算机来释放被占用的端口[^1]。 #### 3. **配置文件中的地址绑定问题** 在多网卡环境下,监听器可能仅绑定了特定 IP 地址,而未允许来自所有网络接口的连接。需要编辑 `listener.ora` 配置文件,确保其包含正确的主机名或 IP 地址[^2]。 修改后的典型配置如下所示: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) ) ) ``` #### 4. **防火墙阻止连接请求** 检查操作系统上的防火墙设置,确保允许监听器使用的端口号(通常是 1521)。可以在 Windows 或 Linux 上临时关闭防火墙测试: - 对于 Linux: ```bash sudo systemctl stop firewalld ``` - 对于 Windows: 可以在控制面板中调整入站规则,开放 1521 端口。 #### 5. **TNS Listener 服务未正常启动** 确认 Oracle TNS Listener 服务已启用并处于活动状态。对于 Windows 用户,可通过以下方式验证: ```plaintext services.msc -> 查找 OracleXETNSListener 并确保其状态为“已启动” ``` 同样地,Linux 下可检查对应的服务状态: ```bash ps -ef | grep tnslsnr ``` #### 6. **注册表路径异常** 在某些情况下,Windows 注册表中的 `ImagePath` 键值可能不正确,这会影响监听器的行为。应将其更改为实际安装目录下的 `tnslsnr.exe` 路径: ```plaintext HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleXETNSListener ImagePath=C:\oraclexe\app\oracle\product\10.2.0\server\BIN\tnslsnr.exe ``` #### 7. **重新加载监听器参数文件** 执行以下操作刷新监听器配置: ```bash lsnrctl reload ``` --- ```python # 示例 Python 脚本用于自动化检测监听器状态 import subprocess def check_listener_status(): try: result = subprocess.run(['lsnrctl', 'status'], capture_output=True, text=True) if "ready" in result.stdout.lower(): print("监听器正在运行") else: print("监听器未运行,请检查配置") except Exception as e: print(f"发生错误: {str(e)}") check_listener_status() ``` --- ### 总结 上述分析涵盖了多种可能导致 `lsnrctl stop connection refused` 的原因以及相应的修复措施。具体实施时可根据实际情况逐一排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值