Example usage for com.amazonaws.services.sqs.model DeleteMessageBatchRequestEntry DeleteMessageBatchRequestEntry

List of usage examples for com.amazonaws.services.sqs.model DeleteMessageBatchRequestEntry DeleteMessageBatchRequestEntry

Introduction

In this page you can find the example usage for com.amazonaws.services.sqs.model DeleteMessageBatchRequestEntry DeleteMessageBatchRequestEntry.

Prototype

public DeleteMessageBatchRequestEntry(String id, String receiptHandle) 

Source Link

Document

Constructs a new DeleteMessageBatchRequestEntry object.

Usage

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);
}