我正在运行几个点火节点并使用SQL表将数据存储在内存中。现在基于系统中的节点数量,我必须在任何节点发生故障时进行一些更改。
为了检测节点故障,每个节点都注册了一个侦听器,当其中一个节点出现故障时,该侦听器会收到一个事件。
但是当听众试图从被复制的表格中获取数据时在所有节点上(使用之前创建的连接对象),它会抛出以下错误。
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at org.apache.ignite.internal.jdbc.thin.JdbcThinTcpIo.send(JdbcThinTcpIo.java:376)
at org.apache.ignite.internal.jdbc.thin.JdbcThinTcpIo.sendRequest(JdbcThinTcpIo.java:325)
at org.apache.ignite.internal.jdbc.thin.JdbcThinConnection.sendRequest(JdbcThinConnection.java:668)
这表示服务器已关闭连接。但由于我们希望连接是缓存节点而不是特定服务器,因此内部点火不会处理这种情况,因此在保持连接的服务器关闭时,连接会重置为不同的服务器。
或者这是由程序员自己处理的。如果是,建议的行动方案是什么。
答案 0 :(得分:3)
点燃"瘦"客户端没有自动重新连接功能。点燃"瘦"客户端连接到一个(客户端或服务器)Ignite节点并使用它来引导所有请求和响应。如果这个节点消失了,"瘦"客户失败。
自动重新连接保留给" thick"创建完全成熟的客户机节点的客户机,它可以自己维护集群内的连接,并可以在节点故障后恢复。
有关两种类型驱动程序配置的示例,请参阅Ignite Drivers docs。它的要点,jdbc:ignite:thin://
意味着"瘦"没有重新连接的客户端,jdbc:ignite:cfg://
表示" thick"客户端节点驱动程序,可以自动重新连接。