/** * Creates a #SendMessageBatchRequestEntry object from a id and #SendMessageRequest object. * The common members of {@link SendMessageRequest} object are copied to the * returned {@link SendMessageBatchRequestEntry} object. */ public static SendMessageBatchRequestEntry createSendMessageBatchRequestEntryFrom(String id, SendMessageRequest sendMessageRequest) { return new SendMessageBatchRequestEntry() .withId(id) .withMessageBody(sendMessageRequest.getMessageBody()) .withDelaySeconds(sendMessageRequest.getDelaySeconds()) .withMessageAttributes(sendMessageRequest.getMessageAttributes()) .withMessageDeduplicationId(sendMessageRequest.getMessageDeduplicationId()) .withMessageGroupId(sendMessageRequest.getMessageGroupId()); } }
entries.add(new SendMessageBatchRequestEntry() .withId(Integer.toString(i)) .withMessageBody(requests.get(i).getMessageBody()) .withDelaySeconds(requests.get(i).getDelaySeconds()) .withMessageAttributes(requests.get(i).getMessageAttributes()));
if (!StringUtils.isBlank(message)) { msgs.add(new SendMessageBatchRequestEntry(). withMessageBody(message). withId(Integer.toString(i)));
if (!StringUtils.isBlank(message)) { msgs.add(new SendMessageBatchRequestEntry(). withMessageBody(message). withId(Integer.toString(i)));
/** * Puts multiple tasks on the queue using batch puts. The tasks argument * can contain more than 10 Tasks, in that case there will be multiple SQS * batch send requests made each containing up to 10 messages. * * @param tasks */ @Override public void put(Set<Task> tasks) { String msgBody = null; SendMessageBatchRequestEntry msgEntry = null; Set<SendMessageBatchRequestEntry> msgEntries = new HashSet<>(); for (Task task : tasks) { msgBody = unmarshallTask(task); msgEntry = new SendMessageBatchRequestEntry() .withMessageBody(msgBody) .withId(msgEntries.size() + ""); // must set unique ID for each msg in the batch request msgEntries.add(msgEntry); // Can only send batch of max 10 messages in a SQS queue request if (msgEntries.size() == 10) { this.sendBatchMessages(msgEntries); msgEntries.clear(); // clear the already sent messages } } // After for loop check to see if there are msgs in msgEntries that // haven't been sent yet because the size never reached 10. if (!msgEntries.isEmpty()) { this.sendBatchMessages(msgEntries); } }
@TaskAction public void sendMessages() { String queueUrl = getQueueUrl(); Stream<String> messages = getMessages(); if (queueUrl == null) { throw new GradleException("Must specify either queueName or queueUrl"); } if (messages == null) { throw new GradleException("Must provide messages to send to SQS"); } AmazonSQSPluginExtension ext = getProject().getExtensions().getByType(AmazonSQSPluginExtension.class); AmazonSQS sqs = ext.getClient(); final AtomicInteger counter = new AtomicInteger(0); List<SendMessageBatchRequestEntry> messageEntries = messages.map(message -> new SendMessageBatchRequestEntry() .withId("gradle_message_index_" + counter.getAndIncrement()).withMessageBody(message)) .collect(Collectors.toList()); getLogger().info("Sending {} messages to {}", messageEntries.size(), queueUrl); Lists.partition(messageEntries, MAX_MESSAGE_SEND_BATCH_SIZE).parallelStream().forEach(messagesToSend -> sqs .sendMessageBatch(new SendMessageBatchRequest().withQueueUrl(queueUrl).withEntries(messagesToSend))); }
entries.add(new SendMessageBatchRequestEntry() .withId(Integer.toString(i)) .withMessageBody(requests.get(i).getMessageBody()) .withDelaySeconds(requests.get(i).getDelaySeconds()) .withMessageAttributes(requests.get(i).getMessageAttributes()));
/** * Creates a #SendMessageBatchRequestEntry object from a id and #SendMessageRequest object. * The common members of {@link SendMessageRequest} object are copied to the * returned {@link SendMessageBatchRequestEntry} object. */ public static SendMessageBatchRequestEntry createSendMessageBatchRequestEntryFrom(String id, SendMessageRequest sendMessageRequest) { return new SendMessageBatchRequestEntry() .withId(id) .withMessageBody(sendMessageRequest.getMessageBody()) .withDelaySeconds(sendMessageRequest.getDelaySeconds()) .withMessageAttributes(sendMessageRequest.getMessageAttributes()) .withMessageDeduplicationId(sendMessageRequest.getMessageDeduplicationId()) .withMessageGroupId(sendMessageRequest.getMessageGroupId()); } }