2014-10-11 1 views
3

Есть ли способ рассказать, что такое состояние осколка, независимо от того, ОТКРЫТО, ЗАКРЫТО или ВЫЯВЛЕН? Единственный способ, которым я смог определить эту информацию, похоже, пытается выполнить операцию на осколке.Как сообщить статус осколка Кинесиса?

+0

Какой язык программирования вы используете? – az3

+1

Не имеет значения. Мне интересно, есть ли способ получить эту информацию через API. – thyme

ответ

6

Вы можете использовать Amazon Web Services Java SDK: https://github.com/aws/aws-sdk-java

Есть много полезных методов для доступа к ресурсам.

Редактировать: Извините, я неправильно понял вопрос. Вы не можете получить доступ к статусу осколка напрямую (пока). Но есть трюк: у закрытого осколка всегда есть «Ending Sequence Number». Вы можете взломать этот путь.

Выдержка из Javadoc;

общественности Строка getEndingSequenceNumber()

Конечный порядковый номер диапазона. Осколки, находящиеся в состоянии ОТКРЫТО, имеют порядковый номер нулевой последовательности.

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/SequenceNumberRange.html#getEndingSequenceNumber()

import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.kinesis.AmazonKinesis; 
import com.amazonaws.services.kinesis.AmazonKinesisClient; 
import com.amazonaws.services.kinesis.model.DescribeStreamRequest; 
import com.amazonaws.services.kinesis.model.DescribeStreamResult; 
import com.amazonaws.services.kinesis.model.ListStreamsResult; 

public class KinesisSandbox { 

    public static void main(String[] args) { 
     try { 
      String amazonKey = "x"; 
      String amazonSecret = "y"; 
      AmazonKinesis client = new AmazonKinesisClient(new BasicAWSCredentials(amazonKey, amazonSecret)); 

      ListStreamsResult listStreamsResult = client.listStreams(); 
      System.out.println("\nlistStreamsResult: " + listStreamsResult); 

      String streamName = listStreamsResult.getStreamNames().get(0); 

      DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); 
      describeStreamRequest.setStreamName(streamName); 
      DescribeStreamResult describeStreamResult = client.describeStream(describeStreamRequest); 
      System.out.println("\n describeStreamResult.getStreamDescription().getStreamStatus(): " 
        + describeStreamResult.getStreamDescription().getStreamStatus()); 
       // System.out.println("\ndescribeStreamResult: " + describeStreamResult); 

      List<Shard> shards = describeStreamResult.getStreamDescription().getShards(); 
      for (int i = 0; i < shards.size(); i++) { 
       Shard shard = shards.get(i); 
       if (shard.getSequenceNumberRange().getEndingSequenceNumber() == null) { 
        System.out.println("shard(" + i + "): " + shard.getShardId() + " is OPEN."); 
       } else { 
        System.out.println("shard(" + i + "): " + shard.getShardId() + " is CLOSED."); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

-

+0

Извините, это статус статуса потока, а не осколка. – thyme

+0

О, извините, я пропустил эту часть. Насколько я знаю, вы не можете получить доступ к статусу осколка напрямую (пока). Но есть трюк: у закрытого осколка всегда есть «EndingSequenceNumber». Вы можете взломать этот путь. http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kinesis/model/SequenceNumberRange.html#getEndingSequenceNumber() – az3

Смежные вопросы