List of usage examples for com.amazonaws.services.sqs.model ReceiveMessageResult getMessages
public java.util.List<Message> getMessages()
A list of messages.
From source file:awslabs.lab31.SolutionCode.java
License:Open Source License
@Override public List<Message> readMessages(AmazonSQSClient sqsClient, String queueUrl) { ReceiveMessageResult receiveMessageResult; // TODO: Construct a ReceiveMessageRequest object using the queue URL provided. Set the maximum number of // messages to 10. ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest().withMaxNumberOfMessages(10) .withQueueUrl(queueUrl);//from w w w .j ava2s .c om // TODO: Submit the request using the receiveMessage method of the sqsClient object. Store the result in the // receiveMessageResult object (already defined). receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest); return receiveMessageResult.getMessages(); }
From source file:com.allogy.amazonaws.elasticbeanstalk.worker.simulator.application.QueueManager.java
License:Apache License
public Stream<MessageWrapper> readQueue() { ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl) .withWaitTimeSeconds(waitTimeSeconds).withMaxNumberOfMessages(maxNumberOfMessages); logger.debug("Reading from queue. queueUrl={}", queueUrl); ReceiveMessageResult receiveMessageResult = amazonSQS.receiveMessage(receiveMessageRequest); List<Message> messages = receiveMessageResult.getMessages(); int messageCount = messages.size(); logger.debug("Received {} messages from queue. queueUrl={}", messageCount, queueUrl); return messages.stream().map( m -> new MessageWrapper().withQueueUrl(queueUrl).withMessage(m).withMessageCount(messageCount)); }
From source file:com.amazon.sqs.javamessaging.AmazonSQSExtendedClient.java
License:Open Source License
/** * <p>/*from w w w .j av a 2 s . co m*/ * Retrieves one or more messages, with a maximum limit of 10 messages, from * the specified queue. Downloads the message payloads from Amazon S3 when * necessary. Long poll support is enabled by using the * <code>WaitTimeSeconds</code> parameter. For more information, see <a * href= * "http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html" * > Amazon SQS Long Poll </a> in the <i>Amazon SQS Developer Guide</i> . * </p> * <p> * Short poll is the default behavior where a weighted random set of * machines is sampled on a <code>ReceiveMessage</code> 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 <code>ReceiveMessage</code> * call. If the number of messages in the queue is extremely small, you * might not receive any messages in a particular * <code>ReceiveMessage</code> response; in which case you should repeat the * request. * </p> * <p> * For each message returned, the response includes the following: * </p> * * <ul> * <li> * <p> * Message body * </p> * </li> * <li> * <p> * MD5 digest of the message body. For information about MD5, go to <a * href="http://www.faqs.org/rfcs/rfc1321.html"> * http://www.faqs.org/rfcs/rfc1321.html </a> . * </p> * </li> * <li> * <p> * Message ID you received when you sent the message to the queue. * </p> * </li> * <li> * <p> * Receipt handle. * </p> * </li> * <li> * <p> * Message attributes. * </p> * </li> * <li> * <p> * MD5 digest of the message attributes. * </p> * </li> * * </ul> * <p> * The receipt handle is the identifier you must provide when deleting the * message. For more information, see <a href= * "http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ImportantIdentifiers.html" * > Queue and Message Identifiers </a> in the <i>Amazon SQS Developer * Guide</i> . * </p> * <p> * You can provide the <code>VisibilityTimeout</code> 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 <a href= * "http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html" * > Visibility Timeout </a> in the <i>Amazon SQS Developer Guide</i> . * </p> * <p> * <b>NOTE:</b> 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. * </p> * * @param receiveMessageRequest * Container for the necessary parameters to execute the * ReceiveMessage service method on AmazonSQS. * * @return The response from the ReceiveMessage service method, as returned * by AmazonSQS. * * @throws OverLimitException * * @throws AmazonClientException * If any internal errors are encountered inside the client * while attempting to make the request or handle the response. * For example if a network connection is not available. * @throws AmazonServiceException * If an error response is returned by AmazonSQS indicating * either a problem with the data in the request, or a server * side issue. */ public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest) { if (receiveMessageRequest == null) { String errorMessage = "receiveMessageRequest cannot be null."; LOG.error(errorMessage); throw new AmazonClientException(errorMessage); } receiveMessageRequest.getRequestClientOptions() .appendUserAgent(SQSExtendedClientConstants.USER_AGENT_HEADER); if (!clientConfiguration.isLargePayloadSupportEnabled()) { return super.receiveMessage(receiveMessageRequest); } receiveMessageRequest.getMessageAttributeNames().add(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME); ReceiveMessageResult receiveMessageResult = super.receiveMessage(receiveMessageRequest); List<Message> messages = receiveMessageResult.getMessages(); for (Message message : messages) { // for each received message check if they are stored in S3. MessageAttributeValue largePayloadAttributeValue = message.getMessageAttributes() .get(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME); if (largePayloadAttributeValue != null) { String messageBody = message.getBody(); // read the S3 pointer from the message body JSON string. MessageS3Pointer s3Pointer = readMessageS3PointerFromJSON(messageBody); String s3MsgBucketName = s3Pointer.getS3BucketName(); String s3MsgKey = s3Pointer.getS3Key(); String origMsgBody = getTextFromS3(s3MsgBucketName, s3MsgKey); LOG.info("S3 object read, Bucket name: " + s3MsgBucketName + ", Object key: " + s3MsgKey + "."); message.setBody(origMsgBody); // remove the additional attribute before returning the message // to user. message.getMessageAttributes().remove(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME); // Embed s3 object pointer in the receipt handle. String modifiedReceiptHandle = embedS3PointerInReceiptHandle(message.getReceiptHandle(), s3MsgBucketName, s3MsgKey); message.setReceiptHandle(modifiedReceiptHandle); } } return receiveMessageResult; }
From source file:com.amazon.sqs.javamessaging.SQSMessageConsumerPrefetch.java
License:Open Source License
/** * Call <code>receiveMessage</code> with long-poll wait time of 20 seconds * with available prefetch batch size and potential re-tries. *//*ww w . j a v a 2 s . c o m*/ protected List<Message> getMessages(int prefetchBatchSize) throws InterruptedException { assert prefetchBatchSize > 0; ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl) .withMaxNumberOfMessages(prefetchBatchSize).withAttributeNames(ALL).withMessageAttributeNames(ALL) .withWaitTimeSeconds(WAIT_TIME_SECONDS); List<Message> messages = null; try { ReceiveMessageResult receivedMessageResult = amazonSQSClient.receiveMessage(receiveMessageRequest); messages = receivedMessageResult.getMessages(); retriesAttempted = 0; } catch (JMSException e) { LOG.warn("Encountered exception during receive in ConsumerPrefetch thread", e); try { sleep(backoffStrategy.delayBeforeNextRetry(retriesAttempted++)); } catch (InterruptedException ex) { LOG.warn("Interrupted while retrying on receive", ex); throw ex; } } return messages; }
From source file:com.amediamanager.scheduled.ElasticTranscoderTasks.java
License:Apache License
protected void checkStatus() { String sqsQueue = config.getProperty(ConfigProps.TRANSCODE_QUEUE); LOG.info("Polling transcode queue {} for changes.", sqsQueue); ReceiveMessageRequest request = new ReceiveMessageRequest(sqsQueue).withMaxNumberOfMessages(3) .withWaitTimeSeconds(20);//from w ww. ja v a 2 s .c o m ReceiveMessageResult result = sqsClient.receiveMessage(request); for (Message msg : result.getMessages()) { handleMessage(msg); } LOG.info("Finished polling transcode queue {} and handled {} message(s).", sqsQueue, result.getMessages().size()); }
From source file:com.blacklocus.qs.worker.aws.AmazonSQSTaskService.java
License:Apache License
@Override public QSTaskModel getAvailableTask() { QSTaskModel task = null;//from w w w . j ava 2 s . com while (task == null) { ReceiveMessageResult result = sqs .receiveMessage(new ReceiveMessageRequest(queueUrl).withMaxNumberOfMessages(1)); assert result.getMessages().size() <= 1; if (result.getMessages().size() == 1) { Message message = result.getMessages().get(0); try { task = objectMapper.readValue(message.getBody(), QSTaskModel.class); receiptHandles.put(task, message.getReceiptHandle()); } catch (IOException e) { LOG.error("Failed to parse message from " + queueUrl + "\n\t" + message); } } else { sleep(); } } return task; }
From source file:com.comcast.cmb.test.tools.CMBTutorial.java
License:Apache License
public static void main(String[] args) { try {/*from w w w. j av a 2 s.c o m*/ Util.initLog4jTest(); //TODO: set user id and credentials for two distinct users // user "cqs_test_1" //BasicAWSCredentials user1Credentials = new BasicAWSCredentials("<access_key>", "<secret_key>"); BasicAWSCredentials user1Credentials = new BasicAWSCredentials("Z2DVBFRNZ2C2SSXDWS5F", "bH2UQiJkpctBaE3eaDob19fj5J9Q1FVafrZantBp"); // user "cqs_test_2" //String user2Id = "<user_id>"; String user2Id = "389653920093"; //BasicAWSCredentials user2Credentials = new BasicAWSCredentials("<access_key>", "<secret_key>"); BasicAWSCredentials user2Credentials = new BasicAWSCredentials("QL8Q1VOBCSJC5FZ2DMIU", "n6a82gyJZ04Z+Xqp7OgfqPtbbKqVc3UbuOTNrF+7"); // service urls //TODO: add service URLs //String cqsServerUrl = "http://<host>:<port>"; //String cnsServerUrl = "http://<host>:<port>"; String cqsServerUrl = "http://localhost:6059"; String cnsServerUrl = "http://localhost:6061"; // initialize service AmazonSQSClient sqs = new AmazonSQSClient(user1Credentials); sqs.setEndpoint(cqsServerUrl); AmazonSNSClient sns = new AmazonSNSClient(user2Credentials); sns.setEndpoint(cnsServerUrl); // create queue Random randomGenerator = new Random(); String queueName = QUEUE_PREFIX + randomGenerator.nextLong(); HashMap<String, String> attributeParams = new HashMap<String, String>(); CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName); createQueueRequest.setAttributes(attributeParams); String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl(); AddPermissionRequest addPermissionRequest = new AddPermissionRequest(); addPermissionRequest.setQueueUrl(queueUrl); addPermissionRequest.setActions(Arrays.asList("SendMessage")); addPermissionRequest.setLabel(UUID.randomUUID().toString()); addPermissionRequest.setAWSAccountIds(Arrays.asList(user2Id)); sqs.addPermission(addPermissionRequest); // create topic String topicName = "TSTT" + randomGenerator.nextLong(); CreateTopicRequest createTopicRequest = new CreateTopicRequest(topicName); CreateTopicResult createTopicResult = sns.createTopic(createTopicRequest); String topicArn = createTopicResult.getTopicArn(); // subscribe and confirm cqs endpoint SubscribeRequest subscribeRequest = new SubscribeRequest(); String queueArn = getArnForQueueUrl(queueUrl); subscribeRequest.setEndpoint(queueArn); subscribeRequest.setProtocol("cqs"); subscribeRequest.setTopicArn(topicArn); SubscribeResult subscribeResult = sns.subscribe(subscribeRequest); String subscriptionArn = subscribeResult.getSubscriptionArn(); if (subscriptionArn.equals("pending confirmation")) { Thread.sleep(500); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(); receiveMessageRequest.setQueueUrl(queueUrl); receiveMessageRequest.setMaxNumberOfMessages(1); ReceiveMessageResult receiveMessageResult = sqs.receiveMessage(receiveMessageRequest); List<Message> messages = receiveMessageResult.getMessages(); if (messages != null && messages.size() == 1) { JSONObject o = new JSONObject(messages.get(0).getBody()); if (!o.has("SubscribeURL")) { throw new Exception("message is not a confirmation messsage"); } String subscriptionUrl = o.getString("SubscribeURL"); httpGet(subscriptionUrl); DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(); deleteMessageRequest.setReceiptHandle(messages.get(0).getReceiptHandle()); deleteMessageRequest.setQueueUrl(queueUrl); sqs.deleteMessage(deleteMessageRequest); } else { throw new Exception("no confirmation message found"); } } // publish and receive message PublishRequest publishRequest = new PublishRequest(); String messageText = "quamvis sint sub aqua, sub aqua maledicere temptant"; publishRequest.setMessage(messageText); publishRequest.setSubject("unit test message"); publishRequest.setTopicArn(topicArn); sns.publish(publishRequest); Thread.sleep(500); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(); receiveMessageRequest.setQueueUrl(queueUrl); receiveMessageRequest.setMaxNumberOfMessages(1); ReceiveMessageResult receiveMessageResult = sqs.receiveMessage(receiveMessageRequest); List<Message> messages = receiveMessageResult.getMessages(); if (messages != null && messages.size() == 1) { String messageBody = messages.get(0).getBody(); if (!messageBody.contains(messageText)) { throw new Exception("message text not found"); } DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(); deleteMessageRequest.setReceiptHandle(messages.get(0).getReceiptHandle()); deleteMessageRequest.setQueueUrl(queueUrl); sqs.deleteMessage(deleteMessageRequest); } else { throw new Exception("no messages found"); } // subscribe and confirm http endpoint String id = randomGenerator.nextLong() + ""; String endPointUrl = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + id; String lastMessageUrl = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "info/" + id + "?showLast=true"; subscribeRequest = new SubscribeRequest(); subscribeRequest.setEndpoint(endPointUrl); subscribeRequest.setProtocol("http"); subscribeRequest.setTopicArn(topicArn); subscribeResult = sns.subscribe(subscribeRequest); subscriptionArn = subscribeResult.getSubscriptionArn(); if (subscriptionArn.equals("pending confirmation")) { Thread.sleep(500); String response = httpGet(lastMessageUrl); JSONObject o = new JSONObject(response); if (!o.has("SubscribeURL")) { throw new Exception("message is not a confirmation messsage"); } String subscriptionUrl = o.getString("SubscribeURL"); response = httpGet(subscriptionUrl); } // publish and receive message publishRequest = new PublishRequest(); publishRequest.setMessage(messageText); publishRequest.setSubject("unit test message"); publishRequest.setTopicArn(topicArn); sns.publish(publishRequest); Thread.sleep(500); String response = httpGet(lastMessageUrl); if (response != null && response.length() > 0) { if (!response.contains(messageText)) { throw new Exception("message text not found"); } } else { throw new Exception("no messages found"); } // delete queue and topic DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest(topicArn); sns.deleteTopic(deleteTopicRequest); sqs.deleteQueue(new DeleteQueueRequest(queueUrl)); System.out.println("OK"); } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.comcast.cns.tools.CQSHandler.java
License:Apache License
public static List<CQSMessage> receiveMessage(String relativeQueueUrl, int waitTimeSeconds, int maxNumberOfMessages) throws Exception { //TODO: inline calling for long polled receive not supported yet List<CQSMessage> messages = new ArrayList<CQSMessage>(); long ts1 = System.currentTimeMillis(); if (useInlineApiCalls && waitTimeSeconds == 0) { messages = CQSAPI.receiveMessages(cnsInternal.getUserId(), relativeQueueUrl, maxNumberOfMessages, null); } else {//from w w w .j a va 2 s.c o m String absoluteQueueUrl = Util.getAbsoluteQueueUrlForRelativeUrl(relativeQueueUrl); ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(absoluteQueueUrl); receiveMessageRequest.setMaxNumberOfMessages(maxNumberOfMessages); //receiveMessageRequest.setVisibilityTimeout(CMBProperties.getInstance().getCNSPublishJobVisibilityTimeout()); if (waitTimeSeconds > 0) { receiveMessageRequest.setWaitTimeSeconds(waitTimeSeconds); } ReceiveMessageResult receiveMessageResult = sqs.receiveMessage(receiveMessageRequest); List<Message> msgs = receiveMessageResult.getMessages(); for (Message m : msgs) { messages.add(new CQSMessage(m)); } } long ts2 = System.currentTimeMillis(); CMBControllerServlet.valueAccumulator.addToCounter(AccumulatorName.CNSCQSTime, ts2 - ts1); return messages; }
From source file:com.comcast.cqs.controller.CQSQueueMessagesPageServlet.java
License:Apache License
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (redirectUnauthenticatedUser(request, response)) { return;//from w w w . j av a 2s . c om } CMBControllerServlet.valueAccumulator.initializeAllCounters(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); String userId = request.getParameter("userId"); String queueName = request.getParameter("queueName"); String msgStr = request.getParameter("message"); String prevHandle = request.getParameter("prevHandle"); String nextHandle = request.getParameter("nextHandle"); String receiptHandle = request.getParameter("receiptHandle"); Map<?, ?> parameters = request.getParameterMap(); Message receivedMessage = null; int shard = 0; if (request.getParameter("shard") != null) { shard = Integer.parseInt(request.getParameter("shard")); } String queueUrl = Util.getAbsoluteQueueUrlForName(queueName, userId); connect(request); if (parameters.containsKey("Send")) { try { SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, msgStr); sqs.sendMessage(sendMessageRequest); logger.debug("event=send_message queue_url= " + queueUrl + " user_id=" + userId); } catch (Exception ex) { logger.error("event=send_message queue_url= " + queueUrl + " user_id=" + userId, ex); throw new ServletException(ex); } } else if (parameters.containsKey("Delete")) { try { DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(queueUrl, receiptHandle); sqs.deleteMessage(deleteMessageRequest); logger.debug("event=delete_message queue_url= " + queueUrl + " receipt_handle=" + receiptHandle); } catch (Exception ex) { logger.error("event=delete_message queue_url= " + queueUrl + " receipt_handle=" + receiptHandle, ex); throw new ServletException(ex); } } else if (parameters.containsKey("Receive")) { try { ReceiveMessageResult result = sqs.receiveMessage(new ReceiveMessageRequest(queueUrl)); logger.debug("event=receive_message queue_url= " + queueUrl + " user_id=" + userId); List<Message> receivedMessages = null; if (result != null) { receivedMessages = result.getMessages(); if (receivedMessages != null && receivedMessages.size() > 0) { receivedMessage = receivedMessages.get(0); } } } catch (Exception ex) { logger.error("event=receive_message queue_url= " + queueUrl + " user_id=" + userId, ex); throw new ServletException(ex); } } int numberOfShards = 1; try { GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest(queueUrl); getQueueAttributesRequest.setAttributeNames(Arrays.asList("NumberOfShards")); GetQueueAttributesResult getQueueAttributesResult = sqs.getQueueAttributes(getQueueAttributesRequest); Map<String, String> attributes = getQueueAttributesResult.getAttributes(); numberOfShards = Integer.parseInt(attributes.get("NumberOfShards")); } catch (Exception ex) { logger.error("event=get_queue_attributes url=" + queueUrl); } out.println("<html>"); out.println("<script type='text/javascript' language='javascript'>"); out.println("function setVisibility(id, buttonid) {"); out.println("if(document.getElementById(buttonid).value=='Less'){"); out.println("document.getElementById(buttonid).value = 'More';"); out.println("document.getElementById(id).style.display = 'none';"); out.println("}else{"); out.println("document.getElementById(buttonid).value = 'Less';"); out.println("document.getElementById(id).style.display = 'inline';"); out.println("}"); out.println("}"); out.println("</script>"); header(request, out, "Peek Messages for Queue " + queueName); out.println("<body>"); out.println("<h2>Peek Messages for Queue " + queueName + "</h2>"); if (user != null) { out.println("<table><tr><td><b>User Name:</b></td><td>" + user.getUserName() + "</td></tr>"); out.println("<tr><td><b>User ID:</b></td><td>" + user.getUserId() + "</td></tr>"); out.println("<tr><td><b>Access Key:</b></td><td>" + user.getAccessKey() + "</td></tr>"); out.println("<tr><td><b>Access Secret:</b></td><td>" + user.getAccessSecret() + "</td></tr>"); out.println("<tr><td><b>Queue Name:</b></td><td>" + queueName + "</td></tr></table>"); } out.println("<p><table><tr><td><b>Send message:</b></td><td></td></tr>"); out.println("<form id='frm1' action=\"/webui/cqsuser/message/?userId=" + userId + "&queueName=" + queueName + "\" method=POST>"); out.println( "<tr><td><textarea rows='3' cols='50' name='message'></textarea><input type='hidden' name='userId' value='" + userId + "'></td><td valign='bottom'><input type='submit' value='Send' name='Send' /></td></tr></form>"); out.println("<tr><td> </td></tr>"); if (numberOfShards > 1) { out.println("<form id='frm2' action=\"/webui/cqsuser/message/?userId=" + userId + "&queueName=" + queueName + "\" method=POST>"); out.println( "<tr><td>Shard: <select name='shard' onChange='document.getElementById(\"frm2\").submit();'>"); for (int i = 0; i < numberOfShards; i++) { out.print("<option value='" + i + "'"); if (shard == i) { out.print(" selected"); } out.println(">" + i + "</option>"); } out.println("</form></select></td></tr></table></p>"); } else { out.println("</table></p>"); } // for receive message out.println("<form id='formsendmessage' action=\"/webui/cqsuser/message/?userId=" + userId + "&queueName=" + queueName + "\" method=POST>"); out.println("<table><tr><td><b>Receive Message:</b></td>"); out.println("<td><input type='hidden' name='userId' value='" + userId + "'></td><td valign='bottom'><input type='submit' value='Receive Message' name='Receive' /></td>"); out.println("</form></tr></table>"); // showing received message out.println("<p><hr width='100%' align='left' /><p>"); out.println("<h3>Received Messages</h3>"); if (receivedMessage != null) { Map<String, String> attributes = receivedMessage.getAttributes(); String timeSent = ""; if (attributes.get("SentTimestamp") != null) { try { timeSent = new Date(Long.parseLong(attributes.get("SentTimestamp"))).toString(); } catch (Exception ex) { } } String timeReceived = ""; if (attributes.get("ApproximateFirstReceiveTimestamp") != null) { try { timeReceived = new Date(Long.parseLong(attributes.get("ApproximateFirstReceiveTimestamp"))) .toString(); } catch (Exception ex) { } } out.println("<table class = 'alternatecolortable'>"); out.println( "<tr><th></th><th>Receipt Handle</th><th>MD5</th><th>Body</th><th>Time Sent</th><th>Time First Received (Appr.)</th><th>Receive Count (Appr.)</th><th>Sender</th><th> </th></tr>"); out.println("<tr>"); out.println("<td>0</td>"); out.println("<td>" + receivedMessage.getReceiptHandle() + "</td>"); out.println("<td>" + receivedMessage.getMD5OfBody() + "</td>"); String messageBody = receivedMessage.getBody(); String messageBodyPart1 = null; String messageBodyPart2 = null; if ((messageBody != null) && (messageBody.length() > 300)) { messageBodyPart1 = messageBody.substring(0, 299); messageBodyPart2 = messageBody.substring(299); out.println("<td>"); out.println(messageBodyPart1); out.println("<div id='rdetail' style=\"display: none;\">" + messageBodyPart2 + "</div>"); out.println( "<input type=button name=type id='rbt' value='More' onclick=\"setVisibility('rdetail', 'rbt');\";> "); out.println("</td>"); } else { out.println("<td>" + receivedMessage.getBody() + "</td>"); } out.println("<td>" + timeSent + "</td>"); out.println("<td>" + timeReceived + "</td>"); out.println("<td>" + attributes.get("ApproximateReceiveCount") + "</td>"); out.println("<td>" + attributes.get("SenderId") + "</td>"); out.println("<td><form action=\"/webui/cqsuser/message/?userId=" + user.getUserId() + "&queueName=" + queueName + "&receiptHandle=" + receivedMessage.getReceiptHandle() + "\" method=POST><input type='submit' value='Delete' name='Delete'/><input type='hidden' name='queueUrl' value='" + queueUrl + "' /></form></td></tr>"); out.println("</table>"); } else { out.println("<p><i>no messages</i></p>"); } List<CQSMessage> availableMessages = null; String queueFirstMessageHandle = null; try { if (queueUrl != null) { String peekRequestUrl = cqsServiceBaseUrl + user.getUserId() + "/" + queueName + "?Action=PeekMessage&AWSAccessKeyId=" + user.getAccessKey() + "&MaxNumberOfMessages=10&Shard=" + shard; if (prevHandle != null) { peekRequestUrl += "&PreviousReceiptHandle=" + prevHandle; } else if (nextHandle != null) { peekRequestUrl += "&NextReceiptHandle=" + nextHandle; } AWSCredentials awsCredentials = new BasicAWSCredentials(user.getAccessKey(), user.getAccessSecret()); String peekXml = httpPOST(cqsServiceBaseUrl, peekRequestUrl, awsCredentials); Element root = XmlUtil.buildDoc(peekXml); List<Element> messageElements = XmlUtil.getCurrentLevelChildNodes( XmlUtil.getCurrentLevelChildNodes(root, "ReceiveMessageResult").get(0), "Message"); for (Element messageElement : messageElements) { if (availableMessages == null) { availableMessages = new ArrayList<CQSMessage>(); } String body = XmlUtil.getCurrentLevelTextValue(messageElement, "Body"); String id = XmlUtil.getCurrentLevelTextValue(messageElement, "MessageId").trim(); String handle = XmlUtil.getCurrentLevelTextValue(messageElement, "ReceiptHandle").trim(); CQSMessage msg = new CQSMessage(id, body); msg.setReceiptHandle(handle); List<Element> attributeElements = XmlUtil.getCurrentLevelChildNodes(messageElement, "Attribute"); Map<String, String> attributes = new HashMap<String, String>(); for (Element attribute : attributeElements) { String name = XmlUtil.getCurrentLevelTextValue(attribute, "Name"); String value = XmlUtil.getCurrentLevelTextValue(attribute, "Value"); if (name != null && value != null) { attributes.put(name, value); } } msg.setAttributes(attributes); availableMessages.add(msg); } //retrieve first messageId from queue. this is for pagination String peekRequestFirstMessageUrl = cqsServiceBaseUrl + user.getUserId() + "/" + queueName + "?Action=PeekMessage&AWSAccessKeyId=" + user.getAccessKey() + "&MaxNumberOfMessages=1&Shard=" + shard; String peekFirstMessageXml = httpPOST(cqsServiceBaseUrl, peekRequestFirstMessageUrl, awsCredentials); Element rootFirstMessage = XmlUtil.buildDoc(peekFirstMessageXml); List<Element> messageElementsForFirstMessage = XmlUtil.getCurrentLevelChildNodes( XmlUtil.getCurrentLevelChildNodes(rootFirstMessage, "ReceiveMessageResult").get(0), "Message"); if (messageElementsForFirstMessage.size() == 1) { queueFirstMessageHandle = XmlUtil .getCurrentLevelTextValue(messageElementsForFirstMessage.get(0), "ReceiptHandle") .trim(); } } } catch (Exception ex) { logger.error("event=peek_message queue_url=" + queueUrl, ex); throw new ServletException(ex); } String previousHandle = null; nextHandle = null; out.println("<p><hr width='100%' align='left' /><p>"); out.println("<h3>Available Messages</h3>"); if ((availableMessages == null) || (availableMessages.size() == 0)) { out.println("<p><i>no messages</i></p>"); } for (int i = 0; availableMessages != null && i < availableMessages.size(); i++) { CQSMessage message = availableMessages.get(i); Map<String, String> attributes = message.getAttributes(); String timeSent = ""; if (attributes.get("SentTimestamp") != null) { try { timeSent = new Date(Long.parseLong(attributes.get("SentTimestamp"))).toString(); } catch (Exception ex) { } } String timeReceived = ""; if (attributes.get("ApproximateFirstReceiveTimestamp") != null) { try { timeReceived = new Date(Long.parseLong(attributes.get("ApproximateFirstReceiveTimestamp"))) .toString(); } catch (Exception ex) { } } if (i == 0) { out.println("<table class = 'alternatecolortable'>"); out.println( "<tr><th></th><th>Receipt Handle</th><th>MD5</th><th>Body</th><th>Time Sent</th><th>Time First Received (Appr.)</th><th>Receive Count (Appr.)</th><th>Sender</th><th> </th></tr>"); previousHandle = message.getReceiptHandle(); } out.println("<tr>"); out.println("<td>" + i + "</td>"); out.println("<td>" + message.getReceiptHandle() + "</td>"); out.println("<td>" + message.getMD5OfBody() + "</td>"); String messageBody = message.getBody(); String messageBodyPart1 = null; String messageBodyPart2 = null; if ((messageBody != null) && (messageBody.length() > 300)) { messageBodyPart1 = messageBody.substring(0, 299); messageBodyPart2 = messageBody.substring(299); out.println("<td>"); out.println(messageBodyPart1); out.println("<div id='detail" + i + "' style=\"display: none;\">" + messageBodyPart2 + "</div>"); out.println("<input type=button name=type id='bt" + i + "' value='More' onclick=\"setVisibility('detail" + i + "', 'bt" + i + "');\";> "); out.println("</td>"); } else { out.println("<td>" + message.getBody() + "</td>"); } out.println("<td>" + timeSent + "</td>"); out.println("<td>" + timeReceived + "</td>"); out.println("<td>" + attributes.get("ApproximateReceiveCount") + "</td>"); out.println("<td>" + attributes.get("SenderId") + "</td>"); out.println("<td></td></tr>"); if (i == availableMessages.size() - 1) { nextHandle = message.getReceiptHandle(); } } out.println("</table>"); //This case is for click on "Next" button of the previous page if (prevHandle != null) { if ((previousHandle) != null) { out.println("<a style='float:left;' href='/webui/cqsuser/message/?userId=" + user.getUserId() + "&queueName=" + queueName + "&nextHandle=" + previousHandle + "'>Prev</a>"); } else { out.println("<a style='float:left;' href='javascript:history.back()'>Prev</a>"); } } else if ((previousHandle != null) && (!previousHandle.equals(queueFirstMessageHandle))) { //this is for all other cases out.println("<a style='float:left;' href='/webui/cqsuser/message/?userId=" + user.getUserId() + "&queueName=" + queueName + "&nextHandle=" + previousHandle + "'>Prev</a>"); } if (availableMessages != null && availableMessages.size() > 0) { out.println("<a style='float:right;' href='/webui/cqsuser/message/?userId=" + user.getUserId() + "&queueName=" + queueName + "&prevHandle=" + nextHandle + "'>Next</a>"); } out.println("<h5 style='text-align:center;'><a href='/webui'>ADMIN HOME</a>"); out.println("<a href='/webui/cqsuser?userId=" + userId + "'>BACK TO QUEUE</a></h5>"); out.println("</body></html>"); CMBControllerServlet.valueAccumulator.deleteAllCounters(); }
From source file:com.dateofrock.aws.simplesqs.JobConsumer.java
License:Apache License
public void consume(Class<? extends AbstractJobTicket> clazz) { String queueName = this.reflector.findQueueName(clazz); GetQueueUrlResult result = this.sqs.getQueueUrl(new GetQueueUrlRequest(queueName)); String queueUrl = result.getQueueUrl(); ReceiveMessageResult receivedMessage = this.sqs.receiveMessage( new ReceiveMessageRequest(queueUrl).withMaxNumberOfMessages(this.maxNumberOfMessages)); List<Message> messages = receivedMessage.getMessages(); for (Message message : messages) { String jobId = message.getBody(); String receiptHandle = message.getReceiptHandle(); AbstractJobTicket jobTicket = null; try {//from w w w . ja v a 2 s. com jobTicket = this.sdbMapper.load(clazz, jobId); jobTicket.receiptHandle = receiptHandle; } catch (SimpleDBMapperNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); // FIXME Message?? this.sqs.deleteMessage(new DeleteMessageRequest(queueUrl, receiptHandle)); return; } Status currentStatus = Status.fromJobTicket(jobTicket); switch (currentStatus) { case WAITING: jobTicket.status = Status.IN_PROGRESS.getValue(); jobTicket.updatedAt = new Date(); this.sdbMapper.save(jobTicket); try { // jobTicket.execute(); } catch (Exception e) { // StackTrace? StringWriter writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e.printStackTrace(printWriter); printWriter.flush(); printWriter.close(); try { writer.close(); } catch (IOException ignore) { } jobTicket.exceptionStackTrace = writer.toString(); jobTicket.status = Status.FAILURE.getValue(); jobTicket.updatedAt = new Date(); this.sdbMapper.save(jobTicket); break; } jobTicket.status = Status.SUCCESS.getValue(); jobTicket.updatedAt = new Date(); this.sdbMapper.save(jobTicket); break; case IN_PROGRESS: jobTicket.processIfInProgress(); break; case SUCCESS: break; case FAILURE: break; default: break; } } }