Example usage for com.amazonaws.services.sqs.model GetQueueAttributesRequest setQueueUrl

List of usage examples for com.amazonaws.services.sqs.model GetQueueAttributesRequest setQueueUrl

Introduction

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

Prototype


public void setQueueUrl(String queueUrl) 

Source Link

Document

The URL of the Amazon SQS queue whose attribute information is retrieved.

Usage

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