File tree 2 files changed +76
-0
lines changed
2 files changed +76
-0
lines changed Original file line number Diff line number Diff line change
1
+ {-# OPTIONS -XOverloadedStrings #-}
2
+
3
+ import Network.AMQP
4
+ import qualified Data.ByteString.Lazy.Char8 as BL
5
+ import qualified Data.Text as DT
6
+ import System.Environment (getArgs )
7
+ import Text.Printf
8
+
9
+ logsExchange = " topic_logs"
10
+
11
+ main :: IO ()
12
+ main = do
13
+ args <- getArgs
14
+ let body = bodyFor args
15
+ severity = severityFor args
16
+ conn <- openConnection " 127.0.0.1" " /" " guest" " guest"
17
+ ch <- openChannel conn
18
+
19
+ declareExchange ch newExchange {exchangeName = logsExchange,
20
+ exchangeType = " topic" ,
21
+ exchangeDurable = False }
22
+ publishMsg ch logsExchange (DT. pack severity)
23
+ (newMsg {msgBody = (BL. pack body),
24
+ msgDeliveryMode = Just NonPersistent })
25
+
26
+ putStrLn $ printf " [x] Sent '%s'" (body)
27
+ closeConnection conn
28
+
29
+
30
+ bodyFor :: [String ] -> String
31
+ bodyFor [] = " Hello, world!"
32
+ bodyFor xs = unwords $ tail xs
33
+
34
+
35
+ severityFor :: [String ] -> String
36
+ severityFor [] = " anonymous.info"
37
+ severityFor xs = head xs
Original file line number Diff line number Diff line change
1
+ {-# OPTIONS -XOverloadedStrings #-}
2
+
3
+ import Network.AMQP
4
+ import qualified Data.ByteString.Lazy.Char8 as BL
5
+ import qualified Data.Text as DT
6
+ import System.Environment (getArgs )
7
+ import Text.Printf (printf )
8
+ import Control.Monad (forM )
9
+
10
+ logsExchange = " topic_logs"
11
+
12
+ main :: IO ()
13
+ main = do
14
+ conn <- openConnection " 127.0.0.1" " /" " guest" " guest"
15
+ ch <- openChannel conn
16
+ severities <- getArgs
17
+
18
+ declareExchange ch newExchange {exchangeName = logsExchange,
19
+ exchangeType = " topic" ,
20
+ exchangeDurable = False }
21
+ (q, _, _) <- declareQueue ch newQueue {queueName = " " ,
22
+ queueAutoDelete = True ,
23
+ queueDurable = False }
24
+ forM severities (\ s -> bindQueue ch q logsExchange (DT. pack s))
25
+
26
+ putStrLn " [*] Waiting for messages. to Exit press CTRL+C"
27
+ consumeMsgs ch q Ack deliveryHandler
28
+
29
+ -- waits for keypresses
30
+ getLine
31
+ closeConnection conn
32
+
33
+ deliveryHandler :: (Message , Envelope ) -> IO ()
34
+ deliveryHandler (msg, metadata) = do
35
+ putStrLn $ printf " [x] %s:%s" (DT. unpack $ envRoutingKey metadata) body
36
+ putStrLn $ " [x] Done"
37
+ ackEnv metadata
38
+ where
39
+ body = (BL. unpack $ msgBody msg)
You can’t perform that action at this time.
0 commit comments