只發送消息,不等待結果,線程太快,有些channel還沒有寫完數據,就stop了,所以本來設置了1000個samples,結果只有337次發送到服務端


jmeter的threadgroup中的每個thread在啟動時,拿到public class TestDemo extends AbstractJavaSamplerClient,執行一次setupTest()方法,然后根據jmeter設置的每個線程迭代次數執行多次runTest()方法,最后結束之前執行teardownTest()方法,
這里每次啟動一個sampler都用到了netty客戶端的連接操作,開啟了eventloopgroup,eventloop,channel其他地方還用到了schedulorThreadPool,這些資源都需要在線程結束前關閉:
public void Stop() {
LOGGER.info("正在關閉RpcClient....");
getChannel().eventLoop().shutdownGracefully();
FutureCache.removeAll();
ExecutorService es = FutureCache.scheduler;
es.shutdown();
while(!es.isTerminated()) {
}
LOGGER.info("已經關閉FutureCache的scheduler...");
if(group != null && !group.isShutdown()) {
group.shutdownGracefully();
group = null;
}
LOGGER.info("RpcClient已關閉....");
}
如果不關閉,jmeter下次運行測試,可能資源混亂。
rpcclient的invokewithfuture使用
// channel.eventLoop().execute(()->{
// channel.writeAndFlush(msg);
// });
會導致客戶端在future.get()時提前拿到結果,然而結果是null,后面報空指針異常。
為什么?
