1

I'm using SQS version 2009-02-01. I created a new queue and created 4 messages in that queue. I tried to receive messages using below function with MaxNumberOfMessages as 4 but random single message is displaying for every response.

<cfset awsAccessKeyId = "XXXXX"/>
<cfset secretAccessKey = "XXXXXXXX"/>

<cfset sqs = CreateObject("component", "amazonsqs").init(awsAccessKeyId, secretAccessKey)/>

<cfset Recvmsg  = sqs.SQSreceiveMessage(queue='298726564284/Queue2')/>


<cffunction name="SQSreceiveMessage" output="false" returntype="any">
    <cfargument name="queue" type="string" required="true"/>
    <cfargument name="amount" type="numeric" required="true"/>

    <cfset Function.dateTimeString =  dateFormat( now(), "yyyy-mm-dd" ) &"T" &timeFormat( now(), "HH:mm:ss" ) &"Z"/> 
    <cfset Function.fixedData = "ActionReceiveMessage" &
                                    "AttributeNameAll"&
                                    "AWSAccessKeyId#This.awsAccessKeyId#" &
                                    "Expires#Function.dateTimeString#" &
                                    "MaxNumberOfMessages4"&
                                    "SignatureMethodHmacSHA1"&
                                    "SignatureVersion1"&
                                    "Version#This.sqsVersion#"&
                                    "VisibilityTimeout15"
                                    />
    <cfset Function.signature = createSignature(Function.fixedData)/>
    <cfhttp method="GET" url="#This.SQSserviceUrl#/#Arguments.queue#" charset="UTF-8">
        <cfhttpparam type="url" name="Action" value="ReceiveMessage"/>
        <cfhttpparam type="url" name="AttributeName" value="All"/>
        <cfhttpparam type="url" name="AWSAccessKeyId" value="#This.awsAccessKeyId#"/>
        <cfhttpparam type="url" name="Expires" value="#Function.dateTimeString#"/>
        <cfhttpparam type="url" name="MaxNumberOfMessages" value="4"/>
        <cfhttpparam type="url" name="Signature" value="#Function.signature#"/>
        <cfhttpparam type="url" name="SignatureMethod" value="HmacSHA1"/>
        <cfhttpparam type="url" name="SignatureVersion" value="1"/>
        <cfhttpparam type="url" name="Version" value="#This.sqsVersion#"/>
        <cfhttpparam type="url" name="VisibilityTimeout" value="15"/>
    </cfhttp>


    <cfreturn cfhttp>
</cffunction>

and the response xml is like below

<?xml version="1.0" encoding="UTF-8"?>
<ReceiveMessageResponse xmlns="http://queue.amazonaws.com/doc/2009-02-01/">
   <ReceiveMessageResult>
      <Message>
         <Body>Sree Test @ 11:32</Body>
         <ReceiptHandle>+eXJYhj5rDrOel0ZHW3NR2q08uP0aaoVA8HrY/zch2J6b04T/wXiPrqAZx40IL60Jn+y3Ll4BHHs/3BQ7dTJR0SnjmqjgHI+pxmFUqvQ77ncStqJ0z7+7hnKyQBSnJgi1E5ScG7SgWkv9u0UDKFMkgZCZio29XPKAm7ZvYHAxXt0mAJHCXzcseh0albm/Dr/w7jNhsmK3eHs84PUuG256a09NxnDp0PhRgY3R+VxbKBZjdaaRsq0BU6j8sfyNjmylyGgZvHreitVyQm4LvnIBxl3HOnwOEKDFOziypP7lS8=</ReceiptHandle>
         <MD5OfBody>58461dc4aacf99d0c5cb3a2514d72e52</MD5OfBody>
         <Attribute>
            <Name>SenderId</Name>
            <Value>AIDAJKBGOBWAWOBX752KI</Value>
         </Attribute>
         <Attribute>
            <Name>ApproximateFirstReceiveTimestamp</Name>
            <Value>1409153512501</Value>
         </Attribute>
         <Attribute>
            <Name>ApproximateReceiveCount</Name>
            <Value>13</Value>
         </Attribute>
         <Attribute>
            <Name>SentTimestamp</Name>
            <Value>1409153512501</Value>
         </Attribute>
         <MessageId>068f8131-360c-4824-a133-660ff7108063</MessageId>
      </Message>
   </ReceiveMessageResult>
   <ResponseMetadata>
      <RequestId>2db8480b-9a1f-569a-8d43-047282ff5ce1</RequestId>
   </ResponseMetadata>
</ReceiveMessageResponse>

How can I get all messages from Receive Messages function?

SOS
  • 6,430
  • 2
  • 11
  • 29

2 Answers2

2

The 'maxmessages' is just that - a maximum - its not the minimum messages to send.

You request some messages, SQS gives you some messages up to and including the max amount, and once you process and delete those you can ask for more - you eventually will get all of them.

E.J. Brennan
  • 45,870
  • 7
  • 88
  • 116
0

try increasing the WaitTimeSeconds to 20 sec,it will resolve your issue.