{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.SQS.ReceiveMessage -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Retrieves one or more messages, with a maximum limit of 10 messages, from the specified queue. Long poll support is enabled by using the 'WaitTimeSeconds' parameter. For more information, see in the /Amazon SQS Developer Guide/. -- -- Short poll is the default behavior where a weighted random set of machines is sampled on a 'ReceiveMessage' call. This means only the messages on the sampled machines are returned. If the number of messages in the queue is small (less than 1000), it is likely you will get fewer messages than you requested per 'ReceiveMessage' call. If the number of messages in the queue is extremely small, you might not receive any messages in a particular 'ReceiveMessage' response; in which case you should repeat the request. -- -- For each message returned, the response includes the following: -- -- - Message body -- -- - MD5 digest of the message body. For information about MD5, go to . -- -- - Message ID you received when you sent the message to the queue. -- -- - Receipt handle. -- -- - Message attributes. -- -- - MD5 digest of the message attributes. -- -- The receipt handle is the identifier you must provide when deleting the message. For more information, see in the /Amazon SQS Developer Guide/. -- -- You can provide the 'VisibilityTimeout' parameter in your request, which will be applied to the messages that Amazon SQS returns in the response. If you do not include the parameter, the overall visibility timeout for the queue is used for the returned messages. For more information, see in the /Amazon SQS Developer Guide/. -- -- Going forward, new attributes might be added. If you are writing code that calls this action, we recommend that you structure your code so that it can handle new attributes gracefully. module Network.AWS.SQS.ReceiveMessage ( -- * Creating a Request receiveMessage , ReceiveMessage -- * Request Lenses , rmVisibilityTimeout , rmMessageAttributeNames , rmWaitTimeSeconds , rmAttributeNames , rmMaxNumberOfMessages , rmQueueURL -- * Destructuring the Response , receiveMessageResponse , ReceiveMessageResponse -- * Response Lenses , rmrsMessages , rmrsResponseStatus ) where import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.SQS.Types import Network.AWS.SQS.Types.Product -- | -- -- /See:/ 'receiveMessage' smart constructor. data ReceiveMessage = ReceiveMessage' { _rmVisibilityTimeout :: !(Maybe Int) , _rmMessageAttributeNames :: !(Maybe [Text]) , _rmWaitTimeSeconds :: !(Maybe Int) , _rmAttributeNames :: !(Maybe [MessageAttribute]) , _rmMaxNumberOfMessages :: !(Maybe Int) , _rmQueueURL :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ReceiveMessage' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'rmVisibilityTimeout' -- -- * 'rmMessageAttributeNames' -- -- * 'rmWaitTimeSeconds' -- -- * 'rmAttributeNames' -- -- * 'rmMaxNumberOfMessages' -- -- * 'rmQueueURL' receiveMessage :: Text -- ^ 'rmQueueURL' -> ReceiveMessage receiveMessage pQueueURL_ = ReceiveMessage' { _rmVisibilityTimeout = Nothing , _rmMessageAttributeNames = Nothing , _rmWaitTimeSeconds = Nothing , _rmAttributeNames = Nothing , _rmMaxNumberOfMessages = Nothing , _rmQueueURL = pQueueURL_ } -- | The duration (in seconds) that the received messages are hidden from subsequent retrieve requests after being retrieved by a 'ReceiveMessage' request. rmVisibilityTimeout :: Lens' ReceiveMessage (Maybe Int) rmVisibilityTimeout = lens _rmVisibilityTimeout (\ s a -> s{_rmVisibilityTimeout = a}); -- | The name of the message attribute, where /N/ is the index. The message attribute name can contain the following characters: A-Z, a-z, 0-9, underscore (_), hyphen (-), and period (.). The name must not start or end with a period, and it should not have successive periods. The name is case sensitive and must be unique among all attribute names for the message. The name can be up to 256 characters long. The name cannot start with \"AWS.\" or \"Amazon.\" (or any variations in casing), because these prefixes are reserved for use by Amazon Web Services. -- -- When using 'ReceiveMessage', you can send a list of attribute names to receive, or you can return all of the attributes by specifying \"All\" or \".*\" in your request. You can also use \"bar.*\" to return all message attributes starting with the \"bar\" prefix. rmMessageAttributeNames :: Lens' ReceiveMessage [Text] rmMessageAttributeNames = lens _rmMessageAttributeNames (\ s a -> s{_rmMessageAttributeNames = a}) . _Default . _Coerce; -- | The duration (in seconds) for which the call will wait for a message to arrive in the queue before returning. If a message is available, the call will return sooner than WaitTimeSeconds. rmWaitTimeSeconds :: Lens' ReceiveMessage (Maybe Int) rmWaitTimeSeconds = lens _rmWaitTimeSeconds (\ s a -> s{_rmWaitTimeSeconds = a}); -- | A list of attributes that need to be returned along with each message. These attributes include: -- -- - 'All' - returns all values. -- -- - 'ApproximateFirstReceiveTimestamp' - returns the time when the message was first received from the queue (epoch time in milliseconds). -- -- - 'ApproximateReceiveCount' - returns the number of times a message has been received from the queue but not deleted. -- -- - 'SenderId' - returns the AWS account number (or the IP address, if anonymous access is allowed) of the sender. -- -- - 'SentTimestamp' - returns the time when the message was sent to the queue (epoch time in milliseconds). -- -- Any other valid special request parameters that are specified (such as 'ApproximateNumberOfMessages', 'ApproximateNumberOfMessagesDelayed', 'ApproximateNumberOfMessagesNotVisible', 'CreatedTimestamp', 'DelaySeconds', 'LastModifiedTimestamp', 'MaximumMessageSize', 'MessageRetentionPeriod', 'Policy', 'QueueArn', 'ReceiveMessageWaitTimeSeconds', 'RedrivePolicy', and 'VisibilityTimeout') will be ignored. rmAttributeNames :: Lens' ReceiveMessage [MessageAttribute] rmAttributeNames = lens _rmAttributeNames (\ s a -> s{_rmAttributeNames = a}) . _Default . _Coerce; -- | The maximum number of messages to return. Amazon SQS never returns more messages than this value but may return fewer. Values can be from 1 to 10. Default is 1. -- -- All of the messages are not necessarily returned. rmMaxNumberOfMessages :: Lens' ReceiveMessage (Maybe Int) rmMaxNumberOfMessages = lens _rmMaxNumberOfMessages (\ s a -> s{_rmMaxNumberOfMessages = a}); -- | The URL of the Amazon SQS queue to take action on. -- -- Queue URLs are case-sensitive. rmQueueURL :: Lens' ReceiveMessage Text rmQueueURL = lens _rmQueueURL (\ s a -> s{_rmQueueURL = a}); instance AWSRequest ReceiveMessage where type Rs ReceiveMessage = ReceiveMessageResponse request = postQuery sqs response = receiveXMLWrapper "ReceiveMessageResult" (\ s h x -> ReceiveMessageResponse' <$> (may (parseXMLList "Message") x) <*> (pure (fromEnum s))) instance Hashable ReceiveMessage instance NFData ReceiveMessage instance ToHeaders ReceiveMessage where toHeaders = const mempty instance ToPath ReceiveMessage where toPath = const "/" instance ToQuery ReceiveMessage where toQuery ReceiveMessage'{..} = mconcat ["Action" =: ("ReceiveMessage" :: ByteString), "Version" =: ("2012-11-05" :: ByteString), "VisibilityTimeout" =: _rmVisibilityTimeout, toQuery (toQueryList "MessageAttributeName" <$> _rmMessageAttributeNames), "WaitTimeSeconds" =: _rmWaitTimeSeconds, toQuery (toQueryList "AttributeName" <$> _rmAttributeNames), "MaxNumberOfMessages" =: _rmMaxNumberOfMessages, "QueueUrl" =: _rmQueueURL] -- | A list of received messages. -- -- /See:/ 'receiveMessageResponse' smart constructor. data ReceiveMessageResponse = ReceiveMessageResponse' { _rmrsMessages :: !(Maybe [Message]) , _rmrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ReceiveMessageResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'rmrsMessages' -- -- * 'rmrsResponseStatus' receiveMessageResponse :: Int -- ^ 'rmrsResponseStatus' -> ReceiveMessageResponse receiveMessageResponse pResponseStatus_ = ReceiveMessageResponse' { _rmrsMessages = Nothing , _rmrsResponseStatus = pResponseStatus_ } -- | A list of messages. rmrsMessages :: Lens' ReceiveMessageResponse [Message] rmrsMessages = lens _rmrsMessages (\ s a -> s{_rmrsMessages = a}) . _Default . _Coerce; -- | The response status code. rmrsResponseStatus :: Lens' ReceiveMessageResponse Int rmrsResponseStatus = lens _rmrsResponseStatus (\ s a -> s{_rmrsResponseStatus = a}); instance NFData ReceiveMessageResponse