跳到主要内容

测试连接

QWen Plus 中英对照 Testing Connections

在某些场景中,在首次建立连接时发送某种健康检查请求是有用的。例如,当使用 TCP 故障转移客户端连接工厂 时,如果选定的服务器允许建立连接但报告其状态不健康,我们可以进行故障转移。

为了支持此功能,在客户端连接工厂中添加一个 connectionTest

/**
* Set a {@link Predicate} that will be invoked to test a new connection; return true
* to accept the connection, false the reject.
* @param connectionTest the predicate.
* @since 5.3
*/
public void setConnectionTest(@Nullable Predicate<TcpConnectionSupport> connectionTest) {
this.connectionTest = connectionTest;
}
java

要测试连接,在测试中将临时监听器附加到连接上。如果测试失败,连接将被关闭并抛出异常。当与 TCP 故障转移客户端连接工厂 一起使用时,这会触发尝试下一个服务器。

important

仅服务器的第一个回复会发送到测试监听器。

在以下示例中,如果我们在发送 PING 时服务器回复 PONG,则认为服务器是健康的。

Message<String> ping = new GenericMessage<>("PING");
byte[] pong = "PONG".getBytes();
clientFactory.setConnectionTest(conn -> {
CountDownLatch latch = new CountDownLatch(1);
AtomicBoolean result = new AtomicBoolean();
conn.registerTestListener(msg -> {
if (Arrays.equals(pong, (byte[]) msg.getPayload())) {
result.set(true);
}
latch.countDown();
return false;
});
conn.send(ping);
try {
latch.await(10, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return result.get();
});
java