Safe Haskell | None |
---|---|
Language | Haskell2010 |
- connect :: String -> Text -> Text -> Text -> IO Connection
- disconnect :: Connection -> IO ()
- data Connection
- respondTo :: Connection -> QueueName -> (Delivery -> IO ()) -> IO Consumer
- tapInto :: Connection -> QueueName -> (Payload -> IO ()) -> IO Consumer
- deliverWithResponse :: Connection -> Request -> IO Response
- deliver :: Connection -> Request -> IO ()
- cancelConsumer :: Consumer -> IO ()
- data Consumer
- data Delivery = Delivery Payload ReplyWith FailWith
- data Error
- = InvalidRequest Payload
- | TimeoutError
Documentation
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
data Connection Source #
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