0
我使用下面開始網狀JAX RS服務器:如何檢查是否Netty的賈克斯盧比服務器已準備就緒
NettyJaxrsServer netty = new NettyJaxrsServer();
netty.setHostname(HOST);
netty.setPort(port);
netty.setDeployment(resteasyDeployment);
// Some optional extra configuration
netty.setKeepAlive(true);
netty.setRootResourcePath("/");
netty.setSecurityDomain(null);
netty.setIoWorkerCount(16);
netty.setExecutorThreadCount(16);
LOGGER.info("Starting REST server on " + System.getenv("HOSTNAME"));
// Start the server
//("Starting REST server on " + System.getenv("HOSTNAME"));
netty.start();
LOGGER.info("Started!");
這工作得很好,但也沒有辦法檢查服務器實際上是達並可以接受REST請求。我一直在向REST接口使用try/catch請求,並且在catch塊中等待時發生異常並重試。它的工作原理,但它是一個有點亂:
private void bringUpInterface(SlaveRestInterface slaveAgent, Target localTarget) {
LOGGER.info("Bringing up interface on " + localTarget.getHostName());
Response r = null;
long startTime = System.currentTimeMillis();
boolean isReady = false;
long wait = 50;
int count = 0;
try {
while (!isReady) {
try {
r = slaveAgent.ping();
r.close();
isReady = true;
long endTime = System.currentTimeMillis();
SYS_LOGGER.info(" [OK]" + " (" + (endTime - startTime + "ms") + ")");
} catch (ProcessingException ce) {
if(r != null) {
r.close();
}
if (count == DEFAULT_TIMEOUT_SEC) {
throw new TimeoutException("Failed to start REST interface in " + DEFAULT_TIMEOUT_SEC
+ "second(s)");
}
Thread.sleep(wait);
wait *= 2;
count++;
} catch (Exception e) {
isReady = false;
throw new FatalException("Couldn't connect to REST interface on " + localTarget.getHostName());
}
}
} catch (InterruptedException | TimeoutException ie) {
isReady = false;
throw new FatalException("REST interface did not come up on " + localTarget.getHostName());
}
}
我想知道如果我可以覆蓋start()方法,並添加代碼ping的端點可能使用的HttpRequest。似乎沒有任何編程方式來查看服務器是否啓動。
對於這項工作,服務器需要有兩個階段的設置,其中的第一步是打開服務器套接字,第二個是實際從中獲取新的連接。很少有java服務器具有這種設置,所以你最終不得不輪詢一個套接字來找出它。實際上有點難過。 –