final String flowFileContent = baos.toString(); CloudQueueMessage message = new CloudQueueMessage(flowFileContent); CloudQueueClient cloudQueueClient; CloudQueue cloudQueue;
attributes.put("azure.queue.insertionTime", message.getInsertionTime().toString()); attributes.put("azure.queue.expirationTime", message.getExpirationTime().toString()); attributes.put("azure.queue.messageId", message.getMessageId()); attributes.put("azure.queue.popReceipt", message.getPopReceipt()); out.write(message.getMessageContentAsByte()); } catch (StorageException e) { getLogger().error("Failed to write the retrieved queue message to FlowFile content due to {}", new Object[] {e}); } catch (StorageException e) { getLogger().error("Failed to delete the retrieved message with the id {} from the queue due to {}", new Object[] {message.getMessageId(), e});
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { this.elementStack.push(localName); if (QueueConstants.QUEUE_MESSAGE_ELEMENT.equals(localName)) { this.message = new CloudQueueMessage(); this.message.setMessageType(this.shouldEncodeMessage ? QueueMessageType.BASE_64_ENCODED : QueueMessageType.RAW_STRING); } }
@Override public Void preProcessResponse(CloudQueue queue, CloudQueueClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_CREATED) { this.setNonExceptionedRetryableFailure(true); return null; } // Parse the returned messages CloudQueueMessage returnedMessage = QueueMessageHandler.readMessages( this.getConnection().getInputStream(), queue.shouldEncodeMessage).get(0); message.setInsertionTime(returnedMessage.getInsertionTime()); message.setExpirationTime(returnedMessage.getExpirationTime()); message.setNextVisibleTime(returnedMessage.getNextVisibleTime()); message.setMessageId(returnedMessage.getMessageId()); message.setPopReceipt(returnedMessage.getPopReceipt()); return null; } };
switch (f.name()) { case TAzureStorageQueueInputProperties.FIELD_MESSAGE_ID: record.put(f.pos(), current.getMessageId()); break; case TAzureStorageQueueInputProperties.FIELD_MESSAGE_CONTENT: record.put(f.pos(), current.getMessageContentAsString()); break; case TAzureStorageQueueInputProperties.FIELD_INSERTION_TIME: record.put(f.pos(), current.getInsertionTime()); break; case TAzureStorageQueueInputProperties.FIELD_EXPIRATION_TIME: record.put(f.pos(), current.getExpirationTime()); break; case TAzureStorageQueueInputProperties.FIELD_DEQUEUE_COUNT: record.put(f.pos(), current.getDequeueCount()); break; case TAzureStorageQueueInputProperties.FIELD_POP_RECEIPT: record.put(f.pos(), current.getPopReceipt()); break; case TAzureStorageQueueInputProperties.FIELD_NEXT_VISIBLE_TIME: record.put(f.pos(), current.getNextVisibleTime()); break; default:
CloudQueueMessage message1 = new CloudQueueMessage("Hello, World1"); queue.addMessage(message1); CloudQueueMessage message2 = new CloudQueueMessage("Hello, World2"); queue.addMessage(message2); CloudQueueMessage message3 = new CloudQueueMessage("Hello, World3"); queue.addMessage(message3); CloudQueueMessage message4 = new CloudQueueMessage("Hello, World4"); queue.addMessage(message4); CloudQueueMessage message5 = new CloudQueueMessage("Hello, World5"); queue.addMessage(message5); view, String.format("Peeked Message : %s", peekedMessage.getMessageContentAsString())); updateMessage.setMessageContent("Updated contents."); EnumSet<MessageUpdateFields> updateFields = EnumSet .of(MessageUpdateFields.CONTENT, retrievedMessage.getMessageContentAsString()); queue.deleteMessage(retrievedMessage);
@NotNull public List<QueueMessage> getQueueMessages(@NotNull StorageAccount storageAccount, @NotNull Queue queue) throws AzureCmdException { List<QueueMessage> qmList = new ArrayList<QueueMessage>(); try { CloudQueueClient client = getCloudQueueClient(storageAccount); String queueName = queue.getName(); CloudQueue cloudQueue = client.getQueueReference(queueName); for (CloudQueueMessage cqm : cloudQueue.peekMessages(32)) { String id = Strings.nullToEmpty(cqm.getId()); String content = Strings.nullToEmpty(cqm.getMessageContentAsString()); Calendar insertionTime = new GregorianCalendar(); if (cqm.getInsertionTime() != null) { insertionTime.setTime(cqm.getInsertionTime()); } Calendar expirationTime = new GregorianCalendar(); if (cqm.getExpirationTime() != null) { expirationTime.setTime(cqm.getExpirationTime()); } int dequeueCount = cqm.getDequeueCount(); qmList.add(new QueueMessage(id, queueName, content, insertionTime, expirationTime, dequeueCount)); } return qmList; } catch (Throwable t) { throw new AzureCmdException("Error retrieving the Queue Message list", t); } }
private StorageRequest<CloudQueueClient, CloudQueue, Void> deleteMessageImpl(final CloudQueueMessage message, final QueueRequestOptions options) { final String messageId = message.getId(); final String messagePopReceipt = message.getPopReceipt(); final StorageRequest<CloudQueueClient, CloudQueue, Void> putRequest = new StorageRequest<CloudQueueClient, CloudQueue, Void>( options, this.getStorageUri()) { @Override public HttpURLConnection buildRequest(CloudQueueClient client, CloudQueue queue, OperationContext context) throws Exception { return QueueRequest.deleteMessage( queue.getIndividualMessageAddress(messageId, context).getUri(this.getCurrentLocation()), options, context, messagePopReceipt); } @Override public void signRequest(HttpURLConnection connection, CloudQueueClient client, OperationContext context) throws Exception { StorageRequest.signBlobQueueAndFileRequest(connection, client, -1L, context); } @Override public Void preProcessResponse(CloudQueue parentObject, CloudQueueClient client, OperationContext context) throws Exception { if (this.getResult().getStatusCode() != HttpURLConnection.HTTP_NO_CONTENT) { this.setNonExceptionedRetryableFailure(true); } return null; } }; return putRequest; }
@Test @Category({ DevFabricTests.class, DevStoreTests.class }) public void testRetrieveMessages() throws StorageException { CloudQueueMessage message1 = new CloudQueueMessage("messagetest1"); this.queue.addMessage(message1); CloudQueueMessage message2 = new CloudQueueMessage("messagetest2"); this.queue.addMessage(message2); for (CloudQueueMessage m : this.queue.retrieveMessages(32)) { assertTrue(m.getId() != null); assertTrue(m.getPopReceipt() != null); } }
@Test @Category({ DevFabricTests.class, DevStoreTests.class }) public void testAddMessage() throws StorageException { String msgContent = UUID.randomUUID().toString(); final CloudQueueMessage message = new CloudQueueMessage(msgContent); this.queue.addMessage(message); VerifyAddMessageResult(message, msgContent); CloudQueueMessage msgFromRetrieve1 = this.queue.retrieveMessage(); assertEquals(message.getMessageContentAsString(), msgContent); assertEquals(msgFromRetrieve1.getMessageContentAsString(), msgContent); }
private void VerifyAddMessageResult(CloudQueueMessage originalMessage, String expectedMessageContent) { assertFalse(Utility.isNullOrEmpty(originalMessage.getId())); assertNotNull(originalMessage.getInsertionTime()); assertNotNull(originalMessage.getExpirationTime()); assertFalse(Utility.isNullOrEmpty(originalMessage.getPopReceipt())); assertTrue(originalMessage.messageContent.equals(expectedMessageContent)); assertNotNull(originalMessage.getNextVisibleTime()); } }
@Test @Category({ DevFabricTests.class, DevStoreTests.class, SlowTests.class }) public void testUpdateMessageFullPass() throws StorageException, InterruptedException { CloudQueueMessage message = new CloudQueueMessage("message"); this.queue.addMessage(message, 20, 0, null, null); CloudQueueMessage message1 = this.queue.retrieveMessage(); String popreceipt1 = message1.getPopReceipt(); Date NextVisibleTim1 = message1.getNextVisibleTime(); this.queue.updateMessage(message1, 100, EnumSet.of(MessageUpdateFields.VISIBILITY), null, null); String popreceipt2 = message1.getPopReceipt(); Date NextVisibleTim2 = message1.getNextVisibleTime(); assertTrue(popreceipt2 != popreceipt1); assertTrue(NextVisibleTim1.before(NextVisibleTim2)); Thread.sleep(2000); String newMesage = message.getMessageContentAsString() + "updated"; message.setMessageContent(newMesage); OperationContext oc = new OperationContext(); this.queue.updateMessage(message1, 100, EnumSet.of(MessageUpdateFields.CONTENT), null, oc); assertEquals(oc.getLastResult().getStatusCode(), HttpURLConnection.HTTP_NO_CONTENT); String popreceipt3 = message1.getPopReceipt(); Date NextVisibleTim3 = message1.getNextVisibleTime(); assertTrue(popreceipt3 != popreceipt2); assertTrue(NextVisibleTim2.before(NextVisibleTim3)); assertTrue(this.queue.retrieveMessage() == null); this.queue.updateMessage(message1, 0, EnumSet.of(MessageUpdateFields.VISIBILITY), null, null); CloudQueueMessage messageFromGet = this.queue.retrieveMessage(); assertEquals(messageFromGet.getMessageContentAsString(), message1.getMessageContentAsString()); }
@Test @Category({ DevFabricTests.class, DevStoreTests.class, SlowTests.class }) public void testRetrieveMessage() throws StorageException, InterruptedException { this.queue.addMessage(new CloudQueueMessage("message"), 20, 0, null, null); OperationContext opContext = new OperationContext(); CloudQueueMessage message1 = this.queue.retrieveMessage(10, null /*QueueRequestOptions*/, opContext); Date expirationTime1 = message1.getExpirationTime(); Date insertionTime1 = message1.getInsertionTime(); Date nextVisibleTime1 = message1.getNextVisibleTime(); assertEquals(HttpURLConnection.HTTP_OK, opContext.getLastResult().getStatusCode()); this.queue.deleteMessage(message1); Thread.sleep(2000); this.queue.addMessage(new CloudQueueMessage("message"), 20, 0, null, null); CloudQueueMessage message2 = this.queue.retrieveMessage(); Date expirationTime2 = message2.getExpirationTime(); Date insertionTime2 = message2.getInsertionTime(); Date nextVisibleTime2 = message2.getNextVisibleTime(); this.queue.deleteMessage(message2); assertTrue(expirationTime1.before(expirationTime2)); assertTrue(insertionTime1.before(insertionTime2)); assertTrue(nextVisibleTime1.before(nextVisibleTime2)); }
public static String toString(CloudQueueMessage cloudQueueMessage){ Map<String, Object> map = new LinkedHashMap<>(); try { map.put("body", cloudQueueMessage.getMessageContentAsString()); } catch (StorageException e) { throw new StorageQueueRuntimeException("Failed to get storage queue message content", e); } map.put("dequeueCount", cloudQueueMessage.getDequeueCount()); map.put("id", cloudQueueMessage.getId()); return map.toString(); } }
@Test @Category({ DevFabricTests.class, DevStoreTests.class }) public void testAddMessageVerifyPopReceipt() throws StorageException { CloudQueueMessage message1 = new CloudQueueMessage("firstmessagetest1"); message1.setNextVisibleTime(null); this.queue.addMessage(message1); VerifyAddMessageResult(message1, "firstmessagetest1"); }
@Test @Category({ DevFabricTests.class, DevStoreTests.class, SlowTests.class }) public void testAddMessageWithVisibilityTimeout() throws StorageException, InterruptedException { this.queue.addMessage(new CloudQueueMessage("message"), 20, 0, null, null); CloudQueueMessage m1 = this.queue.retrieveMessage(); Date d1 = m1.getExpirationTime(); this.queue.deleteMessage(m1); Thread.sleep(2000); this.queue.addMessage(new CloudQueueMessage("message"), 20, 0, null, null); CloudQueueMessage m2 = this.queue.retrieveMessage(); Date d2 = m2.getExpirationTime(); this.queue.deleteMessage(m2); assertTrue(d1.before(d2)); }
@Test @Category({ DevFabricTests.class, DevStoreTests.class }) public void testDequeueCountIncreases() throws StorageException, InterruptedException { this.queue.addMessage(new CloudQueueMessage("message"), 20, 0, null, null); CloudQueueMessage message1 = this.queue.retrieveMessage(1, null, null); assertTrue(message1.getDequeueCount() == 1); for (int i = 2; i < 5; i++) { Thread.sleep(2000); CloudQueueMessage message2 = this.queue.retrieveMessage(1, null, null); assertTrue(message2.getDequeueCount() == i); } }
@Override public boolean advance() throws IOException { advanceable = messages.hasNext(); if (advanceable) { dataCount++; current = messages.next(); if (delete) { try { queueService.deleteMessage(queueName, current); } catch (StorageException | InvalidKeyException | URISyntaxException e) { LOGGER.error(i18nMessages.getMessage("error.Cannotdelete", current.getId(), e.getLocalizedMessage())); } } } return advanceable; }
@Override protected byte[] getPayload(CloudQueueMessage azureMessage) { try { return azureMessage.getMessageContentAsByte(); } catch (StorageException e) { throw new ConversionException("Failed to get queue message content", e); } }
@Override public void accept(QueueMessage queueMessage) { try { queue.addMessage(queueMessage.getMsg(), queueMessage.getTimeToLiveInSeconds(), queueMessage.getInitialVisibilityDelayInSeconds(), null, null); synchronized (this) { result.successCount++; IndexedRecord record = new Record(writeSchema); record.put(0, queueMessage.getMsg().getMessageContentAsString()); successfulWrites.add(record); } } catch (StorageException e) { result.rejectCount++; LOGGER.error(e.getLocalizedMessage()); } } });