Caused by: java.net.ConnectException: Connection refused: connect的错误及解决方式

本文介绍了在使用Redis客户端连接服务器时遇到的“Connection refused”错误,并提供了解决方案。通过修改Redis配置文件中的bind参数为0.0.0.0或指定的IP地址,可以成功建立连接。

Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:149)
... 32 more
出现这个错误之后按照网上的解决方案试了好多都没有效果,有的说把bind 127.0.0.1 

但是我的注释掉之后还是没有用
,最后问了同事,解决方式如下:

将bind修改为 bind 0.0.0.0   使得所有计算机都可以连上,或者配置指定的ip地址,如上图,两者任选其一,亲测有效
(最后说明我的版本是centos6~)

当Canal出现`java.net.ConnectException: Connection refused: connect`错误,通常意味着客户端尝试连接到指定的服务器地址和端口,但服务器未响应,可能是由于服务器未启动、地址或端口配置错误、网络问题等。以下是可能的解决办法: ### 检查Canal服务器是否启动 需要保证Canal服务器已经正常启动。可以通过以下步骤检查: - 查看Canal服务器的日志文件,确认是否有启动成功的信息。 - 使用`ps -ef | grep canal`命令查看Canal进程是否正在运行。 - 如果未启动,可使用以下命令启动Canal: ```bash sh bin/startup.sh ``` ### 检查配置文件中的地址和端口 要确保客户端配置文件里的Canal服务器地址和端口是正确的。通常在Canal客户端代码中,会有类似如下的配置: ```java CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("127.0.0.1", 11111), "example", "", ""); ``` 要检查`InetSocketAddress`中的IP地址和端口是否和Canal服务器的实际配置一致。 ### 检查网络连接 需确认客户端和Canal服务器之间的网络是连通的,可以使用`ping`命令检查网络连通性: ```bash ping 127.0.0.1 ``` 同时,还可以使用`telnet`命令检查端口是否开放: ```bash telnet 127.0.0.1 11111 ``` 若`telnet`命令无法连接,可能是防火墙阻止了连接,需要开放对应的端口。例如,使用以下命令开放端口: ```bash sudo firewall-cmd --zone=public --add-port=11111/tcp --permanent sudo firewall-cmd --reload ``` ### 检查Canal服务器配置 要确保Canal服务器配置文件中的端口和地址配置正确。通常在`conf/canal.properties`文件中,有如下配置: ```properties canal.port = 11111 ``` 确保该端口没有被其他应用占用。 ### 示例代码 以下是一个简单的Canal客户端示例代码: ```java import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry; import com.alibaba.otter.canal.protocol.Message; import java.net.InetSocketAddress; import java.util.List; public class CanalClientExample { public static void main(String[] args) { // 创建连接 CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("127.0.0.1", 11111), "example", "", ""); try { // 连接到Canal服务器 connector.connect(); // 订阅所有表 connector.subscribe(".*\\..*"); // 回滚到未进行ack的地方,下次fetch的时候,可以从最后一个没有ack的地方开始拿 connector.rollback(); while (true) { // 获取指定数量的数据 Message message = connector.get(100); List<CanalEntry.Entry> entries = message.getEntries(); if (entries != null && !entries.isEmpty()) { for (CanalEntry.Entry entry : entries) { if (entry.getEntryType() == CanalEntry.EntryType.ROWDATA) { try { CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue()); for (CanalEntry.RowData rowData : rowChange.getRowDatasList()) { if (rowChange.getEventType() == CanalEntry.EventType.INSERT) { System.out.println("Insert event: " + rowData.getAfterColumnsList()); } else if (rowChange.getEventType() == CanalEntry.EventType.UPDATE) { System.out.println("Update event: " + rowData.getAfterColumnsList()); } else if (rowChange.getEventType() == CanalEntry.EventType.DELETE) { System.out.println("Delete event: " + rowData.getBeforeColumnsList()); } } } catch (Exception e) { e.printStackTrace(); } } } } } } catch (Exception e) { e.printStackTrace(); } finally { connector.disconnect(); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值