1

次の C# コードと同様の機能を持つ GetAttributeRequest を Java で実装しようとしています。

try
{
  long epochWindowTime = ToEpochTimeInMilliseconds(DateTime.UtcNow.Subtract(this.SQSWindow));
  int numberOfMessages = 0;

   // 1st query to determine the # of Messages available in the queue
   using (AmazonSQSClient client = new AmazonSQSClient(
           this.AWSAccessKey, this.AWSSecretAccessKey,
           ew AmazonSQSConfig() { ServiceURL = this.AWSSQSServiceUrl }))
  {
  // get the NumberOfMessages to optimize how to Receive all of the messages from the queue
     GetQueueAttributesRequest attributesRequest = new GetQueueAttributesRequest();
     attributesRequest.QueueUrl = this.QueueUrl;
     attributesRequest.AttributeName.Add("ApproximateNumberOfMessages");
     numberOfMessages = client.GetQueueAttributes(attributesRequest).GetQueueAttributesResult.ApproximateNumberOfMessages;
  }

Java 実装での私の試みは次のようになります。

try
{
    long epochWindowTime;
    int numberOfMessages = 0;
    Map<String, String> attributes;

    // Setup the SQS client
    AmazonSQS client = new AmazonSQSClient(new 
            ClasspathPropertiesFileCredentialsProvider());

    client.setEndpoint(this.AWSSQSServiceUrl);

    // get the NumberOfMessages to optimize how to 
    // Receive all of the messages from the queue

    GetQueueAttributesRequest attributesRequest = 
            new GetQueueAttributesRequest();
    attributesRequest.setQueueUrl(this.QueueUrl);
    //attributesRequest.setAttributeNames();
    attributes = client.getQueueAttributes(attributesRequest).
            getAttributes();

    numberOfMessages = Integer.valueOf(attributes.get(
            "ApproximateNumberOfMessages")).intValue();

}catch (AmazonServiceException ase){
    ase.printStackTrace();
}catch (AmazonClientException ace) {
    ace.printStackTrace();

}

属性名を追加する Java AmazonSQS 実装には Collection が必要なため、「ApproximateNumberOfMessages」を適切に追加する方法がわかりません。

また、より良い代替手段があるかどうかも知りたいです

new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider());

それは C# の実装に近いですか? これは、このメソッドが SDK の一部として使用されることを意図しており、AWSAccessKey と AWSSecretAccessKey が別の構成ファイルの一部になるためです。独自の AWSCredentialsProvider を作成する唯一のオプションですか?

4

1 に答える 1