List of usage examples for com.amazonaws.services.sqs.model GetQueueAttributesRequest setQueueUrl
public void setQueueUrl(String queueUrl)
The URL of the Amazon SQS queue whose attribute information is retrieved.
From source file:org.apache.usergrid.apm.service.ApplicationServiceImpl.java
License:Apache License
public AccessKey createAuthorizedAppPrinciple(Long applicationId, String orgAppName) { CreateUserRequest createUserRequest = new CreateUserRequest(); createUserRequest.setUserName(APP_PRINCIPLE_USER_PREFIX + "_" + orgAppName); createUserRequest.setRequestCredentials(awsCredentials); try {//from w w w. ja va 2s .c o m CreateUserResult createUserResult = identityManagementClient.createUser(createUserRequest); log.info("cloud user id for app with " + orgAppName + " created with " + createUserResult.getUser().getUserName()); CreateAccessKeyRequest accessKeyRequest = new CreateAccessKeyRequest(); accessKeyRequest.setUserName(createUserResult.getUser().getUserName()); CreateAccessKeyResult accessKeyResult = identityManagementClient.createAccessKey(accessKeyRequest); //Create policy of queue GetQueueAttributesRequest attributesRequest = new GetQueueAttributesRequest(); log.info("Going to secure sqs queue : " + AWSUtil.formFullQueueUrl(orgAppName)); attributesRequest.setQueueUrl(AWSUtil.formFullQueueUrl(orgAppName)); List<String> attributeNames = new ArrayList<String>(); attributeNames.add("QueueArn"); attributesRequest.setAttributeNames(attributeNames); GetQueueAttributesResult attributesResult = sqsClient.getQueueAttributes(attributesRequest); String queueArn = attributesResult.getAttributes().get("QueueArn"); String policy = POLICY_DOCUMENT_TEMPLATE.replace("QUEUE_ARN", queueArn); String formattedPolicy = String.format(POLICY_DOCUMENT_TEMPLATE, queueArn); log.info("Applying authorization for following AWS resources" + formattedPolicy); PutUserPolicyRequest policyRequest = new PutUserPolicyRequest(); policyRequest.setPolicyName(POLICY_NAME); policyRequest.setPolicyDocument(formattedPolicy); policyRequest.setUserName(createUserResult.getUser().getUserName()); identityManagementClient.putUserPolicy(policyRequest); log.info("User policy for queue " + queueArn + " was set"); return accessKeyResult.getAccessKey(); } catch (EntityAlreadyExistsException e) { log.error("This should not happen in production. Swallowing the error fow now " + e.getMessage()); log.error(e); return null; } }
From source file:org.apache.usergrid.apm.service.MetricsInjestionServiceSQSImpl.java
License:Apache License
protected List<ReceiveMessageResult> getClientDataForApp(String fullAppName) { ArrayList<ReceiveMessageResult> messageResults = new ArrayList<ReceiveMessageResult>( MAX_NUMBER_OF_REQUEST_TO_PROCESS); try {//from w w w . ja va 2 s .c o m GetQueueAttributesRequest queueAttributesRequest = new GetQueueAttributesRequest(); ArrayList<String> attributeNames = new ArrayList<String>(2); attributeNames.add("ApproximateNumberOfMessages"); attributeNames.add("LastModifiedTimestamp"); //attributeNames.add("All"); queueAttributesRequest.setAttributeNames(attributeNames); String qUrl = AWSUtil.formFullQueueUrl(fullAppName); log.info("Getting APM data from SQS queue" + qUrl); queueAttributesRequest.setQueueUrl(qUrl); GetQueueAttributesResult queueAttributeResult = sqsClient.getQueueAttributes(queueAttributesRequest); String numMessagesString = queueAttributeResult.getAttributes().get("ApproximateNumberOfMessages"); //Calculate number of "ReceiveMessage" requests need to be made. //TODO might need to use AsyncClient in the future to make multiple requests int numMessages = Integer.parseInt(numMessagesString); log.info("Num Messages to Process " + numMessages + " messages"); if (numMessages > 0) { int receiveMessages = 0; int receiveRequest = 0; int lastNumberOfRecievedMessages = 1; while ((receiveMessages < numMessages) && (receiveRequest < MAX_NUMBER_OF_REQUEST_TO_PROCESS) && (lastNumberOfRecievedMessages != 0)) { ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(); receiveMessageRequest.setMaxNumberOfMessages(MAX_NUMBER_OF_MESSAGES); receiveMessageRequest.setQueueUrl(qUrl); ArrayList<String> requestMessageAttributeNames = new ArrayList<String>(1); requestMessageAttributeNames.add("All"); receiveMessageRequest.setAttributeNames(requestMessageAttributeNames); try { ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest); log.info("For application " + fullAppName + " Received " + receiveMessageResult.getMessages().size() + " messages."); receiveMessages += receiveMessageResult.getMessages().size(); //check if any of these messages have been downloaded already. Since SQS is distributed and injestor //could have failed before deleting particular message, we check for message read count to 3. In odd //case, some messages could get processed at most 3 times. List<Message> messages = receiveMessageResult.getMessages(); String receiveCount = null; Message m = null; for (Iterator<Message> iter = messages.iterator(); iter.hasNext();) { m = iter.next(); receiveCount = m.getAttributes().get("ApproximateReceiveCount"); if (receiveCount != null && Integer.valueOf(receiveCount) > 3) { log.warn("ReceiveCount of message for app " + fullAppName + " is greater than 3 so going to delete this message before further processing"); sqsClient.deleteMessage(new DeleteMessageRequest(qUrl, m.getReceiptHandle())); iter.remove(); } } lastNumberOfRecievedMessages = receiveMessageResult.getMessages().size(); if (lastNumberOfRecievedMessages > 0) { messageResults.add(receiveMessageResult); receiveRequest++; } ; } catch (Exception ex) { log.error("Problem getting messages for " + fullAppName, ex); } } } } catch (AmazonServiceException ce) { log.error("Problem pulling message from SQS for " + fullAppName, ce); } catch (Exception e) { log.error("Problem getting messages for " + fullAppName, e); } return messageResults; }