package com.alibaba.rocketmq.remoting; import static org.junit.Assert.assertTrue; import io.netty.channel.ChannelHandlerContext; import java.util.concurrent.Executors; import com.alibaba.rocketmq.remoting.exception.RemotingConnectException; import com.alibaba.rocketmq.remoting.exception.RemotingSendRequestException; import com.alibaba.rocketmq.remoting.exception.RemotingTimeoutException; import com.alibaba.rocketmq.remoting.netty.NettyClientConfig; import com.alibaba.rocketmq.remoting.netty.NettyRemotingClient; import com.alibaba.rocketmq.remoting.netty.NettyRemotingServer; import com.alibaba.rocketmq.remoting.netty.NettyRequestProcessor; import com.alibaba.rocketmq.remoting.netty.NettyServerConfig; import com.alibaba.rocketmq.remoting.protocol.RemotingCommand; /** * @author shijia.wxr<vintage.wang@gmail.com> * @since 2013-7-6 */ public class NettyIdleTest { public static RemotingClient createRemotingClient() { NettyClientConfig config = new NettyClientConfig(); config.setClientChannelMaxIdleTimeSeconds(15); RemotingClient client = new NettyRemotingClient(config); client.start(); return client; } public static RemotingServer createRemotingServer() throws InterruptedException { NettyServerConfig config = new NettyServerConfig(); config.setServerChannelMaxIdleTimeSeconds(30); RemotingServer remotingServer = new NettyRemotingServer(config); remotingServer.registerProcessor(0, new NettyRequestProcessor() { private int i = 0; @Override public RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) { System.out.println("processRequest=" + request + " " + (i++)); request.setRemark("hello, I am respponse " + ctx.channel().remoteAddress()); return request; } }, Executors.newCachedThreadPool()); remotingServer.start(); return remotingServer; } // @Test public void test_idle_event() throws InterruptedException, RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException { RemotingServer server = createRemotingServer(); RemotingClient client = createRemotingClient(); for (int i = 0; i < 10; i++) { RemotingCommand request = RemotingCommand.createRequestCommand(0, null); RemotingCommand response = client.invokeSync("127.0.0.1:8888", request, 1000 * 3); System.out.println(i + " invoke result = " + response); assertTrue(response != null); Thread.sleep(1000 * 10); } Thread.sleep(1000 * 60); client.shutdown(); server.shutdown(); System.out.println("-----------------------------------------------------------------"); } }