package Ġcode sample . kotlin . ktor Ċ Ċ import Ġcom . google . common . net . Host And Port Ċ import Ġcom . orbit z . consul . Cons ul Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . auth .* Ċ import Ġio . ktor . features .* Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . engine . apache .* Ċ import Ġio . ktor . client . features . json .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġio . ktor . client . features . logging .* Ċ import Ġio . ktor . gson . gson Ċ import Ġio . ktor . locations . Locations Ċ import Ġio . ktor . request . queryString Ċ import Ġorg . apache . kafka . clients . consumer . Consumer Ċ import Ġorg . apache . kafka . clients . consumer . Kafka Consumer Ċ import Ġorg . apache . kafka . clients . producer . Kafka Producer Ċ import Ġorg . apache . kafka . clients . producer . Producer Ċ import Ġorg . apache . kafka . clients . producer . Producer Record Ċ import Ġorg . apache . kafka . common . serialization . String Deserializer Ċ import Ġorg . apache . kafka . common . serialization . String Serializer Ċ import Ġorg . yaml . s na key aml . Yaml Ċ import Ġjava . time . Duration Ċ import Ġjava . util .* ĊĊ Ċ sealed Ġclass ĠComponent ( open Ġval ĠnodeName : ĠString ) Ċ class ĠLeaf ( override Ġval ĠnodeName : ĠString ) Ġ: ĠComponent ( nodeName ) Ġ{ ĊĠĠĠ Ġfun ĠgetValue () Ġ= ĠnodeName Ċ } Ċ Ċ class ĠComposite ( override Ġval ĠnodeName : ĠString , Ġprivate Ġval Ġchildren : ĠMutable List < Component > Ġ= Ġmutable ListOf ()) Ġ: ĊĠĠĠ ĠComponent ( nodeName ) Ġ{ ĊĠĠĠ Ġfun Ġadd Child ( child : ĠComponent ) Ġ= Ġchildren . add ( child ) ĊĠĠĠ Ġfun Ġget Children () Ġ= Ġchildren Ċ } Ċ Ċ class ĠProperty Reader ( map : ĠMutable Map < String , ĠAny >) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġproperties Holder Ġ= ĠComposite (" head ") ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġmap Of (" head " Ġto Ġmap ) ĊĠĠĠĠĠĠĠ Ġread Map Re cursively ( properties Holder , Ġfirst . getValue (" head ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġread Ġproperty Ġfrom Ġ[ map ] Ġpassed Ġin Ġwhen Ġthis Ġclass Ġis Ġcreated ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠComposite Ġis Ġused Ġhere Ġinstead Ġof ĠMap < String , ĠAny > Ġto Ġensure Ġtype - safety Ġand Ġto Ġmake Ġtraversal Ġeasier Ġto Ġupdate Ġif ĊĠĠĠĠ Ġ* Ġrequired Ġ*/ ĊĠĠĠ Ġfun Ġread Property ( path : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit ted Path Ġ= Ġpath . split ("/") ĊĠĠĠĠĠĠĠ Ġvar Ġcur Place In Tree Ġ= Ġproperties Holder Ġas ĠComponent ĊĊĠĠĠĠĠĠĠ Ġvar Ġcur Num Of Tra versed Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġtarget Num Of Tra versed Ġ= Ġsplit ted Path . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( cur Path : ĠString Ġin Ġsplit ted Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cur Place In Tree ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLeaf Ġ-> Ġif Ġ( cur Num Of Tra versed Ġ== Ġtarget Num Of Tra versed ) Ġreturn Ġcur Place In Tree . nodeName Ġ// ĠIs Ġit Ġreachable ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComposite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpossible Child Ġ= Ġcur Place In Tree . getChildren (). find Ġ{ Ġit . nodeName Ġ== Ġcur Path Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Num Of Tra versed ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Place In Tree Ġ= Ġpossible Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( cur Num Of Tra versed Ġ== Ġtarget Num Of Tra versed Ġ&& Ġcur Place In Tree . nodeName Ġ== Ġsplit ted Path . last ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( cur Place In Tree ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLeaf Ġ-> Ġcur Place In Tree . nodeName Ġ// ĠIs Ġreachable ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComposite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Place In Tree . getChildren () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first ()?. nodeName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread Property OrThrow ( path : ĠString ): ĠString Ġ= Ġread Property ( path ) !! ĊĊĠĠĠ Ġprivate Ġfun Ġread Map Re cursively ( composite : ĠComposite , Ġmutable Map : ĠMutable Map < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Map . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġcomposite . addChild ( Composite ( nodeName Ġ= Ġkey , Ġchildren Ġ= Ġmutable ListOf ( Leaf ( value )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Comp Ġ= ĠComposite ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite . addChild ( inner Comp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Map Re cursively ( inner Comp , Ġvalue Ġas ĠMutable Map < String , ĠAny >) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ Ċ private Ġfun Ġcreate Producer ( bro kers : ĠString ): ĠProducer < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġprops Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" bootstrap . servers "] Ġ= Ġbro kers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" key . serializer "] Ġ= ĠString Serializer :: class . java . canonical Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" value . serializer "] Ġ= ĠString Serializer :: class . java . canonical Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠKafka Producer ( props ) Ċ } Ċ Ċ fun Ġcreate Consumer ( bro kers : ĠString ): ĠConsumer < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġprops Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" bootstrap . servers "] Ġ= Ġbro kers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" group . id "] Ġ= Ġ" hello _ world " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" key . de serializer "] Ġ= ĠString Deserializer :: class . java . canonical Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" value . de serializer "] Ġ= ĠString Deserializer :: class . java . canonical Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠKafka Consumer ( props ) Ċ } ĊĊĊ Ċ fun Ġmain ( args : ĠArray < String >): ĠUnit Ġ= Ġio . ktor . server . netty . Engine Main . main ( args ) Ċ Ċ /** Ċ Ġ* ĠÐ § ÑĤÐ¾ ĠÐ½ ÑĥÐ¶ Ð½Ð¾ : Ċ Ġ* Ġ+ /- ĠÐ ĵ ÐµÐ½ ÐµÑĢ Ð¸ÑĤÑĮ ÑģÑı ĠÐ¸Ð· Ġopen Api Ġ( Ð³ ÐµÐ½ ÐµÑĢ Ð¸ÑĤ ÑģÑı , ĠÐ½Ð¾ ĠÐ½ ÐµÑĤ ĠÐ° ÑĢ ÑĤÐµ ÑĦ Ð°Ðº ÑĤÐ¾ÑĢ ĠÐ´Ð»Ñı ĠÑĢÐ°Ñģ ÑĪÐ¸ ÑĢ ÐµÐ½Ð¸Ñı ) Ċ Ġ* Ġ+ ĠÐŁ Ð¾Ð´ Ð³ ÑĢÑĥ Ð¶ Ð°ÑĤÑĮ ĠÐºÐ¾Ð½ ÑĦ Ð¸Ð³ Ð¸ ĠÐ¸Ð· ĠÐºÐ¾Ð½ Ñģ Ñĥ Ð»Ð° Ċ Ġ* ĠÐł Ð°Ð± Ð¾ÑĤ Ð°ÑĤÑĮ ĠÑģ ĠÐº Ð° ÑĦ Ðº Ð¾Ð¹ , ĠÐºÐ°Ðº ĠÐ² ĠÐº Ð°Ñĩ ÐµÑģÑĤÐ² Ðµ Ġconsumer , ĠÑĤÐ°Ðº ĠÐ¸ ĠÐ² ĠÐº Ð°Ñĩ ÐµÑģÑĤÐ² Ðµ Ġproducer Ċ Ġ* ĠÐł Ð°Ð± Ð¾ÑĤ Ð°ÑĤÑĮ ĠÑģ Ġpostgres Ġ( Ð¸Ð· Ġj oo q ) Ċ Ġ* ĠÐ£ Ð¼ ÐµÑĤ ÑĮ ĠÐ¿Ð¾Ð´ Ð½ Ð¸Ð¼ Ð°ÑĤÑĮÑģÑı ĠÐ±ÐµÐ· ĠÐ¾ Ðº ÑĢÑĥ Ð¶ ÐµÐ½Ð¸Ñı ĠÐ´Ð»Ñı ĠÑĤ ÐµÑģÑĤ Ð¾Ð² Ċ Ġ* Ġ+ ĠÐ¡ Ð¾Ð± Ð¸ÑĢ Ð°ÑĤÑĮÑģÑı ĠÐ² Ġdocker ĠÐ¾Ð± ÑĢÐ°Ð· Ċ Ġ* ĠÐ¡ Ð¾Ð± Ð¸ÑĢ Ð°ÑĤÑĮÑģÑı ĠÑĩ ÐµÑĢ ÐµÐ· Ġgit lab - ci Ċ Ġ* ĠÐ£ Ð¼ ÐµÑĤ ÑĮ ĠÐ² Ġhealth - check Ċ Ġ*/ Ċ Ċ @ kotlin . jvm . Jvm Over loads Ċ fun ĠApplication . main ( testing : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĊĠĠĠ Ġ// ĠCON S UL ĊĠĠĠ Ġval Ġcons ul Client Ġ= ĠCons ul ĊĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠ Ġ. with Host And Port ( Host And Port . fromString (" localhost : 8 5 0 0 ")) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġval Ġkv Client Ġ= Ġcons ul Client . key Value Client () ĊĊĠĠĠ Ġval Ġyaml Reader Ġ= ĠYaml () ĊĠĠĠ Ġval Ġcommon Ġ= Ġyaml Reader . load < Mutable Map < String , ĠAny >>( kv Client . getValue AsString (" config / common / data "). get ()) ĊĠĠĠ Ġval Ġservice Ġ= Ġyaml Reader . load < Mutable Map < String , ĠAny >>( kv Client . getValue AsString (" config / hello _ world / data "). get ()) ĊĊĠĠĠ Ġval Ġprop Reader Common Ġ= ĠProperty Reader ( common ) ĊĠĠĠ Ġval Ġprop Reader Service Ġ= ĠProperty Reader ( service ) ĊĊĠĠĠ Ġval Ġprop 1 Ġ= Ġprop Reader Common . read Property (" common 1 / conf 1 ") ĊĠĠĠ Ġval Ġprop 2 Ġ= Ġprop Reader Common . read Property (" common 2 ") ĊĊĠĠĠ Ġval Ġprop 3 Ġ= Ġprop Reader Service . read Property (" specific 1 / conf 1 ") ĊĠĠĠ Ġval Ġprop 4 Ġ= Ġprop Reader Service . read Property (" specific 2 ") ĊĊĠĠĠ Ġval Ġresult Num Ġ= Ġthis . environment . config . property OrNull (" custom _ constant . value _ num ") ?. getString ()?. toInt () ĊĠĠĠ Ġval Ġresult Str Ġ= Ġthis . environment . config . property OrNull (" custom _ constant . value _ str ") ?. getString () ĊĊĠĠĠ Ġprintln ("$ prop 1 , Ġ$ prop 2 Ġ$ prop 3 Ġ$ prop 4 Ġ$ result Num Ġ$ result Str ") ĊĊĠĠĠ Ġ// ĠK AF KA ĊĠĠĠ Ġval Ġkafka Broker Url Ġ= Ġprop Reader Common . read Property OrThrow (" kafka / url ") ĊĊĠĠĠ Ġval Ġproducer Ġ= Ġcreate Producer ( kafka Broker Url ) ĊĠĠĠ Ġval Ġsend Result Ġ= Ġproducer . send ( Producer Record (" new _ topic ", Ġ" value ")). get () ĊĊĠĠĠ Ġval Ġconsumer Ġ= Ġcreate Consumer ( kafka Broker Url ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġthis . subscribe ( listOf (" new _ topic ")) Ġ} ĊĊĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= Ġconsumer . poll ( Duration . of Seconds ( 1 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( record . count () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" no Ġnew Ġmessages ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . records (" new _ topic "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" received Ġon Ġconsumer : Ġ${ it . value () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer . commit Sync () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" offset : Ġ${ send Result . offset ()} Ġpartition : Ġ${ send Result . partition () }") ĊĊĊĠĠĠ Ġ// ĠActual Ġapplication ĊĠĠĠ Ġinstall ( Authentication ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgson Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġinstall ( Locations ) ĊĊĠĠĠ Ġval Ġclient Ġ= ĠHttpClient ( Apache ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠGson Serializer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( Logging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠLogLevel . HEADERS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSample Ġfor Ġmaking Ġa ĠHTTP ĠClient Ġrequest Ċ /* ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġclient . post < Json Sample Class > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl (" http :// 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / path / to / endpoint ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= ĠJson Sample Class ( hello Ġ= Ġ" world ") ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" HEL LO ĠW ORLD !", ĠcontentType Ġ= ĠContentType . Text . Plain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ new _ msg ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Msg ( producer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" done Ġwith Ġhandling ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" Send Ġmessage !", ĠcontentType Ġ= ĠContentType . Text . Plain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ json / gson ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Json Sample Class (" ke ks ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ get /{ id }/ now ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcall . parameters [" id "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġcall . request . query Parameters [" param 1 "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġcall . request . query Parameters [" param 2 "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthird Ġ= Ġcall . request . query Parameters [" param 3 "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Json Sample Class ("$ id Ġ$ first Ġ$ second Ġ$ third Ġq String : Ġ${ call . request . queryString ()} ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpost < Body > ("/ body /{ some }/{ parameters }/{ optional ? }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Ġ= Ġcall . parameters [" some "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcall . parameters [" parameters "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptional Ġ= Ġcall . parameters [" optional "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Json Sample Class ("$ some Ġ$ parameters Ġ$ optional ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpost < Body > ("/ body ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Json Sample Class (" successful Ġreceived Ġbody Ġwith Ġname : Ġ${ it . name }, Ġage : Ġ${ it . age } ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġfun Ġsend Msg ( producer : ĠProducer < String , ĠString >) Ġ{ ĊĠĠĠ Ġproducer . send ( Producer Record (" new _ topic ", Ġ" value ")) ĊĠĠĠ Ġprintln (" done Ġwith Ġsending ") Ċ } ĊĊ Ċ data Ġclass ĠJson Sample Class ( val Ġhello : ĠString ) Ċ data Ġclass ĠBody ( val Ġname : ĠString , Ġval Ġage : ĠInt ) Ċ