package Ġcom . gl uten . rpc . http Ċ Ċ import Ġcom . gl uten . common . Node Ċ import Ġcom . gl uten . common . URL Ċ import Ġcom . gl uten . registry . Gl uten Registry Ċ import Ġcom . gl uten . rpc . Abstract Invoker Ċ import Ġcom . gl uten . rpc . Invocation Ċ import Ġcom . gl uten . rpc . Result Ċ import Ġcom . gl uten . rpc . Rpc Result Ċ import Ġcom . gl uten . rpc . http . utils . Http Utils Ċ import Ġcom . gl uten . rpc . lb . Load Balance Ċ import Ġorg . apache . http . Http Entity Ċ import Ġorg . apache . http . HttpHeaders Ċ import Ġorg . apache . http . ParseException Ċ import Ġorg . apache . http . client . entity . Url Encoded Form Entity Ċ import Ġorg . apache . http . client . methods . Closeable HttpResponse Ċ import Ġorg . apache . http . client . methods . HttpGet Ċ import Ġorg . apache . http . client . methods . HttpPost Ċ import Ġorg . apache . http . impl . client . Closeable HttpClient Ċ import Ġorg . apache . http . util . Entity Utils Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . IOException Ċ import Ġjava . security . NoSuch AlgorithmException Ċ Ċ class ĠHttp Invoker ( private Ġval ĠhttpClient : ĠClose able HttpClient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġregistry : ĠG lut en Registry ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġload Balance : ĠLoad Balance ?): ĠAbstract Invoker ( registry , Ġload Balance ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Http Invoker :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo Invoke ( instance : ĠNode , Ġinvocation : ĠInvocation ): ĠRpc Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest URL : ĠString ? Ġ= Ġrequest URL ( instance , Ġinvocation ) ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠHttp Post ( request URL ) ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠClose able HttpResponse ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnv ps Ġ= ĠHttp Utils . build ValuePair ( request . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost . entity Ġ= ĠUrl Encoded Form Entity ( nv ps !! , Ġ" UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġthis . httpClient . execute ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" It Ġsp ends Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ+ Ġ" Ġms Ġto Ġfinish Ġthis Ġjob !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresponse !!. status Line ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . statusCode Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġresponse . entity ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= ĠEntity Utils . toString ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity Utils . consume ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 4 : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( response ?. status Line . reason Phrase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 5 : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 6 : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 3 : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Get ( request Url : ĠString , Ġrequest : ĠRpc Request ): ĠRpc Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠqueryParams : ĠString Ġ= ĠHttp Utils . queryParams ( request . parameters ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠClose able HttpResponse ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġentity : ĠHttp Entity ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Ġ= ĠHttp Get ( request Url Ġ+ ĠqueryParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠhttpClient . execute ( get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresponse . getStatus Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . statusCode Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġresponse . entity ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= ĠEntity Utils . toString ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity Utils . consume ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 4 : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( response ?. status Line . reason Phrase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreceive Response ( response : ĠClose able HttpResponse ): ĠRpc Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresponse . status Line ĊĠĠĠĠĠĠĠ Ġif Ġ( status . statusCode Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġresponse . entity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . getHeaders ( HttpHeaders . CONTENT _ TYPE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= ĠEntity Utils . toString ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity Utils . consume ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( var 2 4 : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( response ?. status Line . reason Phrase ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest URL ( instance : ĠNode , Ġinvocation : ĠInvocation ): ĠString ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( instance . protocol Ġ!= Ġurl . protocol ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġrequest URL Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġrequest URL . append ( instance . protocol . value ) ĊĠĠĠĠĠĠĠ Ġrequest URL . append (" :// ") ĊĠĠĠĠĠĠĠ Ġrequest URL . append ( instance . host ) ĊĠĠĠĠĠĠĠ Ġif Ġ( instance . port Ġ!= Ġ 8 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest URL . append (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest URL . append ( instance . port ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequest URL . append ("/") ĊĠĠĠĠĠĠĠ Ġrequest URL . append ( invocation . get RequestMapping ()) Ċ Ċ // ĠĠĠĠĠĠĠ Ġval ĠqueryParams : ĠMap < String , ĠString > Ġ= Ġinvocation . parameters ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrequest URL . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠHttp Inv ok ers () Ġ{ Ċ Ċ }