/* * Copyright 1999-2012 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.dubbo.examples.heartbeat; import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.remoting.Transporters; import com.alibaba.dubbo.remoting.exchange.ExchangeClient; import com.alibaba.dubbo.remoting.exchange.ExchangeHandler; import com.alibaba.dubbo.remoting.exchange.ExchangeServer; import com.alibaba.dubbo.remoting.exchange.support.ExchangeHandlerAdapter; import com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeClient; import com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeServer; /** * @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a> */ public class HeartbeatServer { private static final URL clientUrl = URL.valueOf( new StringBuilder( 32 ) .append( "netty://" ) .append( NetUtils.getLocalHost() ) .append( ":9999" ).toString() ) .addParameter( Constants.CODEC_KEY, "exchange" ); private static final ExchangeHandler handler = new ExchangeHandlerAdapter() { }; private static ExchangeServer exchangeServer; private static volatile boolean serverStarted = false; public static void main( String[] args ) throws Exception { final HeartBeatExchangeHandler serverHandler = new HeartBeatExchangeHandler( handler ); Thread serverThread = new Thread( new Runnable() { public void run() { try { exchangeServer = new HeaderExchangeServer( Transporters.bind( clientUrl.addParameter( Constants.HEARTBEAT_KEY, 1000 ), serverHandler ) ); serverStarted = true; } catch ( Exception e ) { e.printStackTrace(); } } } ); serverThread.setDaemon( true ); serverThread.start(); while ( !serverStarted ) { Thread.sleep( 1000 ); } HeartBeatExchangeHandler clientHandler = new HeartBeatExchangeHandler( handler ); ExchangeClient exchangeClient = new HeaderExchangeClient( Transporters.connect( clientUrl, clientHandler ) ); for ( int i = 0; i < 10; i++ ) { Thread.sleep( 1000 ); System.out.print( "." ); } System.out.println(); if ( clientHandler.getHeartBeatCount() > 0 ) { System.out.printf( "Client receives %d heartbeats", clientHandler.getHeartBeatCount() ); } else { throw new Exception( "Server heartbeat does not work." ); } exchangeClient.close(); exchangeServer.close(); } }