1111using System . Runtime . Loader ;
1212using System . Text ;
1313using System . Threading ;
14+ using System . Threading . Tasks ;
1415
1516namespace Refiner
1617{
@@ -32,56 +33,61 @@ static void Main(string[] args)
3233 . CreateLogger ( ) ;
3334
3435 Log . Information ( "Starting..." ) ;
35-
36- var factory = new ConnectionFactory ( ) { HostName = "rabbit.docker" } ;
37- conn = factory . CreateConnection ( ) ;
38- channel = conn . CreateModel ( ) ;
39-
40- var exchange = "grabid_exchange" ;
41- var routingKey = "mono.data.received" ;
42-
43- channel . ExchangeDeclare ( exchange : exchange , type : "topic" ) ;
44-
45- var queueName = channel . QueueDeclare ( ) . QueueName ;
46-
47- channel . QueueBind ( queue : queueName ,
48- exchange : exchange ,
49- routingKey : routingKey ) ;
50-
51-
52- var consumer = new EventingBasicConsumer ( channel ) ;
53-
54- consumer . Received += ( model , ea ) =>
55- {
56- var body = ea . Body ;
57- var message = Encoding . UTF8 . GetString ( body ) ;
58- var key = ea . RoutingKey ;
59- Console . WriteLine ( $ " [x] Received '{ key } ':'{ message } '") ;
60- var envelope = JsonConvert . DeserializeObject < Envelope < string > > ( message ) ;
61-
62- dynamic json = JObject . Parse ( envelope . Payload ) ;
63- string messageString = json . message ;
64- string userString = json . users ;
65- string [ ] userArray = userString . Split ( "," ) ;
66- string [ ] messages = userArray . Select ( user => { return $ "{ messageString } { user } "; } ) . ToArray ( ) ;
67- var returnEnvelope = new Envelope < string [ ] > ( envelope . Id , messages ) ;
68- string newMessage = JsonConvert . SerializeObject ( returnEnvelope ) ;
69- byte [ ] messageBodyBytes = Encoding . UTF8 . GetBytes ( newMessage ) ;
70-
71- channel . BasicPublish ( exchange , "mono.data.refined" , null , messageBodyBytes ) ;
72- Console . WriteLine ( $ " [x] Sent 'mono.data.refined':'{ newMessage } '") ;
73-
74- } ;
75- channel . BasicConsume ( queue : queueName ,
76- autoAck : true ,
77- consumer : consumer ) ;
78-
36+
37+ RetrieveMessageFromQueue ( "mono.data.received" ) ;
38+
7939 Log . Information ( "Started" ) ;
8040
8141 WaitHandle . WaitOne ( ) ;
8242 }
8343
44+ public static void RetrieveMessageFromQueue ( string queue )
45+ {
46+ var factory = new ConnectionFactory ( ) ;
47+ using ( IConnection conn = factory . CreateConnection ( ) )
48+ {
49+ using ( IModel channel = conn . CreateModel ( ) )
50+ {
51+ var exchange = "mono.data.received" ;
52+
53+ channel . QueueDeclare ( queue , true , false , false , null ) ;
54+
55+ channel . ExchangeDeclare ( exchange : exchange , type : "fanout" ) ;
56+
57+ channel . QueueBind ( queue , exchange , "" ) ;
58+
59+ var consumer = new EventingBasicConsumer ( channel ) ;
60+
61+ consumer . Received += ( model , ea ) =>
62+ {
63+ var body = ea . Body ;
64+ var message = Encoding . UTF8 . GetString ( body ) ;
65+ var key = ea . RoutingKey ;
66+ Console . WriteLine ( $ " [x] Received '{ key } ':'{ message } '") ;
67+ var envelope = JsonConvert . DeserializeObject < Envelope < string > > ( message ) ;
68+
69+ var processor = new DataProcessor ( envelope ) ;
70+ var cleanData = processor . ParseEnvelope ( ) ;
71+
72+ ForwardMessageToQueue ( channel , "mono.data.refined" , cleanData ) ;
73+
74+ Console . WriteLine ( $ " [x] Sent 'mono.data.refined':'{ cleanData } '") ;
75+ } ;
76+
77+ channel . BasicConsume ( queue : queue ,
78+ autoAck : true ,
79+ consumer : consumer ) ;
80+ }
81+ }
82+ }
8483
84+ public static void ForwardMessageToQueue ( IModel channel , string queue , JArray cleanData )
85+ {
86+ var message = JsonConvert . SerializeObject ( cleanData ) ;
87+ byte [ ] messageBodyBytes = System . Text . Encoding . UTF8 . GetBytes ( message ) ;
88+ channel . BasicPublish ( queue , null , null , messageBodyBytes ) ;
89+ }
90+
8591 private static void Exit ( )
8692 {
8793 Log . Information ( "Exiting..." ) ;
0 commit comments