List of usage examples for com.amazonaws.services.sqs.model DeleteMessageBatchRequestEntry DeleteMessageBatchRequestEntry
public DeleteMessageBatchRequestEntry(String id, String receiptHandle)
From source file:com.amazon.sqs.javamessaging.acknowledge.RangedAcknowledger.java
License:Open Source License
/** * Acknowledges up to 10 messages via calling * <code>deleteMessageBatch</code>. *//* w w w . j ava 2s. c om*/ @Override public void action(String queueUrl, List<String> receiptHandles) throws JMSException { if (receiptHandles == null || receiptHandles.isEmpty()) { return; } List<DeleteMessageBatchRequestEntry> deleteMessageBatchRequestEntries = new ArrayList<DeleteMessageBatchRequestEntry>(); for (String receiptHandle : receiptHandles) { // Remove the message from queue of unAckMessages unAckMessages.poll(); DeleteMessageBatchRequestEntry entry = new DeleteMessageBatchRequestEntry( Long.toString(batchIdGenerator.incrementAndGet()), receiptHandle); deleteMessageBatchRequestEntries.add(entry); } DeleteMessageBatchRequest deleteMessageBatchRequest = new DeleteMessageBatchRequest(queueUrl, deleteMessageBatchRequestEntries); /** * TODO: If one of the batch calls fail, then the remaining messages on * the batch will not be deleted, and will be visible and delivered as * duplicate after visibility timeout expires. */ amazonSQSClient.deleteMessageBatch(deleteMessageBatchRequest); }
From source file:com.erudika.para.queue.AWSQueueUtils.java
License:Apache License
/** * Pulls a number of messages from an SQS queue. * @param queueURL the URL of the SQS queue * @param numberOfMessages the number of messages to pull * @return a list of messages// ww w . jav a 2 s . co m */ public static List<String> pullMessages(String queueURL, int numberOfMessages) { List<String> messages = new ArrayList<String>(); if (!StringUtils.isBlank(queueURL)) { try { int batchSteps = 1; int maxForBatch = numberOfMessages; if ((numberOfMessages > MAX_MESSAGES)) { batchSteps = (numberOfMessages / MAX_MESSAGES) + ((numberOfMessages % MAX_MESSAGES > 0) ? 1 : 0); maxForBatch = MAX_MESSAGES; } for (int i = 0; i < batchSteps; i++) { List<Message> list = getClient().receiveMessage(new ReceiveMessageRequest(queueURL) .withMaxNumberOfMessages(maxForBatch).withWaitTimeSeconds(POLLING_INTERVAL)) .getMessages(); if (list != null && !list.isEmpty()) { List<DeleteMessageBatchRequestEntry> del = new ArrayList<DeleteMessageBatchRequestEntry>(); for (Message msg : list) { messages.add(msg.getBody()); del.add(new DeleteMessageBatchRequestEntry(msg.getMessageId(), msg.getReceiptHandle())); } getClient().deleteMessageBatch(queueURL, del); } } } catch (AmazonServiceException ase) { logException(ase); } catch (AmazonClientException ace) { logger.error("Could not reach SQS. {}", ace.toString()); } } return messages; }
From source file:jp.classmethod.aws.gradle.sqs.AmazonSQSMessageConsumerTask.java
License:Apache License
@TaskAction public void consumeMessages() { String queueUrl = getQueueUrl(); if (queueUrl == null) { throw new GradleException("Must specify either queueName or queueUrl"); }/* w w w . ja v a2 s. co m*/ AmazonSQSPluginExtension ext = getProject().getExtensions().getByType(AmazonSQSPluginExtension.class); AmazonSQS sqs = ext.getClient(); int counter = 0; while (counter < maxNumberOfMessages) { ReceiveMessageRequest request = new ReceiveMessageRequest().withQueueUrl(queueUrl) .withMaxNumberOfMessages(MAX_MESSAGE_CONSUME_BATCH_SIZE).withVisibilityTimeout(30); List<DeleteMessageBatchRequestEntry> messagesToDelete = sqs.receiveMessage(request).getMessages() .stream().map(message -> { if (showMessages) { getLogger().lifecycle( String.format(Locale.ENGLISH, "Read message id: %s, message body: %200s", message.getMessageId(), message.getBody())); } return new DeleteMessageBatchRequestEntry(message.getMessageId(), message.getReceiptHandle()); }).collect(Collectors.toList()); if (messagesToDelete.isEmpty()) { break; } deleteMessages(sqs, queueUrl, messagesToDelete); counter += messagesToDelete.size(); } getLogger().lifecycle("Consumed a total of {} messages from {}", counter, queueUrl); }
From source file:org.apache.usergrid.persistence.queue.impl.SNSQueueManagerImpl.java
License:Apache License
@Override public void commitMessages(final List<LegacyQueueMessage> queueMessages) { String url = getReadQueue().getUrl(); if (logger.isTraceEnabled()) { logger.trace("Commit messages {} to queue {}", queueMessages.size(), url); }/*from ww w . j a v a 2 s. c o m*/ List<DeleteMessageBatchRequestEntry> entries = new ArrayList<>(); for (LegacyQueueMessage message : queueMessages) { entries.add(new DeleteMessageBatchRequestEntry(message.getMessageId(), message.getHandle())); } DeleteMessageBatchRequest request = new DeleteMessageBatchRequest(url, entries); DeleteMessageBatchResult result = sqs.deleteMessageBatch(request); boolean successful = result.getFailed().size() <= 0; if (!successful) { for (BatchResultErrorEntry failed : result.getFailed()) { logger.error("Commit failed reason: {} messages id: {}", failed.getMessage(), failed.getId()); } } }
From source file:zipkin.collector.sqs.SQSSpanProcessor.java
License:Apache License
private void process(final List<Message> messages) { if (messages.size() == 0) return;// w w w . j av a 2s .com final List<DeleteMessageBatchRequestEntry> toDelete = new ArrayList<>(); int count = 0; for (Message message : messages) { final String deleteId = String.valueOf(count++); try { String stringBody = message.getBody(); if (stringBody.isEmpty()) continue; // allow plain-text json, but permit base64 encoded thrift or json byte[] spans = stringBody.charAt(0) == '[' ? stringBody.getBytes(UTF_8) : Base64.decode(stringBody); collector.acceptSpans(spans, DETECTING_DECODER, new Callback<Void>() { @Override public void onSuccess(Void value) { toDelete.add(new DeleteMessageBatchRequestEntry(deleteId, message.getReceiptHandle())); } @Override public void onError(Throwable t) { logger.log(Level.WARNING, "collector accept failed", t); // for cases that are not recoverable just discard the message, // otherwise ignore so processing can be retried. if (t instanceof IllegalArgumentException) { toDelete.add(new DeleteMessageBatchRequestEntry(deleteId, message.getReceiptHandle())); } } }); } catch (RuntimeException | Error e) { logger.log(Level.WARNING, "message decoding failed", e); toDelete.add(new DeleteMessageBatchRequestEntry(deleteId, message.getReceiptHandle())); } } delete(toDelete); }