freddy-0.1.0.0: RabbitMQ Messaging API supporting request-response

Safe HaskellNone
LanguageHaskell2010

Network.Freddy

Synopsis

Documentation

connect Source

Arguments

:: String

server host

-> Text

virtual host

-> Text

user name

-> Text

password

-> IO Connection 

Creates a connection with the message queue.

Example:

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
 

disconnect :: Connection -> IO () Source

Closes the connection with the message queue.

Example:

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
   Freddy.disconnect connection
 

respondTo :: Connection -> QueueName -> (Delivery -> IO ()) -> IO Consumer Source

Responds to messages on a given destination. It is useful for messages that have to be processed once and then a result must be sent.

Example:

   processMessage (Freddy.Delivery body replyWith failWith) = replyWith body

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
   Freddy.respondTo connection "echo" processMessage
 

tapInto :: Connection -> QueueName -> (Payload -> IO ()) -> IO Consumer Source

Listens for messages on a given destination or destinations without consuming them.

Example:

   processMessage body = putStrLn body

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
   Freddy.tapInto connection "notifications.*" processMessage
 

deliverWithResponse :: Connection -> Request -> IO Response Source

Sends a message and waits for the response.

Example:

   import qualified Network.Freddy as Freddy
   import qualified Network.Freddy.Request as R

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"

   response <- Freddy.deliverWithResponse connection R.newReq {
     R.queueName = "echo",
     R.body = "{\"msg\": \"what did you say?\"}"
   }

   case response of
     Right payload -> putStrLn "Received positive result"
     Left (Freddy.InvalidRequest payload) -> putStrLn "Received error"
     Left Freddy.TimeoutError -> putStrLn "Request timed out"
 

deliver :: Connection -> Request -> IO () Source

Send and forget type of delivery. It sends a message to given destination without waiting for a response. This is useful when there are multiple consumers that are using tapInto or you just do not care about the response.

Example:

   import qualified Network.Freddy as Freddy
   import qualified Network.Freddy.Request as R

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
   Freddy.deliver connection R.newReq {
     R.queueName = "notifications.user_signed_in",
     R.body = "{\"user_id\": 1}"
   }
 

cancelConsumer :: Consumer -> IO () Source

Stops the consumer from listening new messages.

Example:

   connection <- Freddy.connect "127.0.0.1" "/" "guest" "guest"
   consumer <- Freddy.tapInto connection "notifications.*" processMessage
   threadDelay tenMinutes $ Freddy.cancelConsumer consumer
 

data Delivery Source

Constructors

Delivery Payload ReplyWith FailWith 

data Error Source

Constructors

InvalidRequest Payload 
TimeoutError