package Ġcom . d hs develop ments . rq java Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . rabbitmq . client . AM QP Ċ import Ġcom . rabbitmq . client . Channel Ċ import Ġcom . rabbitmq . client . Default Consumer Ċ import Ġcom . rabbitmq . client . Envelope Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Logger Ċ Ċ class ĠChannel Subscription ( val Ġconn : ĠPot ato Connection , Ġval Ġcid : ĠString , Ġval Ġcallback : Ġ( Message ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġr q Channel : ĠChannel ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger . getLogger ( Channel Subscription :: class . qualified Name ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠUTF 8 Ġ= ĠCharset . forName (" UTF - 8 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġr q Channel Ġ= Ġconn . amqp Conn . create Channel () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġr q Channel . queue Declare ("", Ġtrue , Ġfalse , Ġtrue , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrouting Ġkey Ġformat : ĠDO MAIN . CHANNEL . SEND ER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr q Channel . queue Bind ( q . queue , Ġ" message - send - ex ", Ġ"* .$ cid .* ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsumer Ġ= Ġobject Ġ: ĠDefault Consumer ( rq Channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Delivery ( consumer Tag : ĠString , Ġenvelope : ĠEn velope , Ġproperties : ĠAMQP . Basic Properties , Ġbody : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠInputStreamReader ( ByteArray InputStream ( body ), ĠUTF 8 ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( it , ĠMessage :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġr q Channel . basic Consume ( q . queue , Ġtrue , Ġconsumer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr q Channel . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ( e 2 : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log ( Level . SEVERE , Ġ" Error Ġclosing Ġchannel Ġwhen Ġhandling Ġexception Ġin Ġsubscribe Channel ", Ġe 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġr q Channel . close () ĊĠĠĠ Ġ} Ċ }