Exemplo n.º 1
0
        /// <summary>
        /// 获取数据游标
        /// </summary>
        /// <param name="streamName">通道名称</param>
        /// <param name="shardId">分区ID</param>
        public static GetShardIteratorResult GetCursorDemo(string streamName, string shardId)
        {
            var dic = new DISIngestionClient();

            //该参数与游标类型AT_TIMESTAMP搭配使用
            long timestamp = 1543397197333;

            //该参数与游标类型AT_SEQUENCE_NUMBER、AFTER_SEQUENCE_NUMBER搭配使用
            string startingSequenceNumber = "0";

            //AT_SEQUENCE_NUMBER:从特定序列号所在的记录开始读取。此类型为默认游标类型。
            //AFTER_SEQUENCE_NUMBER:从特定序列号后的记录开始读取。
            //TRIM_HORIZON:从分区中时间最长的记录开始读取。
            //LATEST:在分区中最新的记录之后开始读取,以确保始终读取分区中的最新数据。
            //AT_TIMESTAMP:从特定时间戳开始读取。
            string shardIteratorType = "AT_SEQUENCE_NUMBER";

            var request = new GetShardIteratorRequest
            {
                //通道名称
                StreamName = streamName,
                //分区值
                ShardId = shardId,
                //游标类型,可选参数
                ShardIteratorType = shardIteratorType,
                //序列号,可选参数
                StartingSequenceNumber = startingSequenceNumber,
                //时间戳,可选参数
                Timestamp = timestamp
            };

            var response = dic.GetShardIterator(request);

            Console.Out.WriteLine(response);
            return(response);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 新增Checkpoint
        /// </summary>
        /// <param name="streamName">通道名称</param>
        /// <param name="appName">app名称</param>
        public static ResponseResult AddCheckPointDemo(string streamName, string appName)
        {
            var dic     = new DISIngestionClient();
            var request = new CommitCheckpointRequest
            {
                //通道名称
                StreamName = streamName,
                //APP的名称
                AppName = appName,
                //分区的唯一标识符
                PartitionId = "shardId-0000000000",
                //序列号
                SequenceNumber = "10",
                //用户消费程序端的元数据信息
                Metadata = "metadata",
                //Checkpoint类型
                CheckpointType = "LAST_READ",
            };

            var response = dic.CommitCheckpoint(request);

            Console.Out.WriteLine(response);
            return(response);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 查询通道列表
        /// </summary>
        /// <param name="startStreamName">起始通道名称</param>
        /// <param name="limit">每次查询时返回的通道数量</param>
        /// <returns></returns>
        public static DescribeStreamListResult DescribeStreamList(string startStreamName, int?limit)
        {
            DescribeStreamListResult response = null;
            var dic     = new DISIngestionClient();
            var request = new DescribeStreamRequest();

            if (!string.IsNullOrEmpty(startStreamName))
            {
                //从该通道开始返回通道列表,返回的通道列表不包括此通道名称。
                request.StartStreamName = startStreamName;
            }

            if (limit != null)
            {
                //单次请求返回通道列表的最大数量
                request.Limit = limit.Value;
            }

            response = dic.DescribeStreamList(request);
            var reqJson = JsonConvert.SerializeObject(response);

            Console.WriteLine(reqJson);
            return(response);
        }
        /// <summary>
        /// 下载数据
        /// </summary>
        /// <param name="streamName">通道名称</param>
        /// <param name="shardId">分区ID</param>
        public static void RunConsumerDemo(string streamName, string shardId)
        {
            var dic = new DISIngestionClient();

            //该参数与游标类型AT_TIMESTAMP搭配使用
            long timestamp = 1543397197333;

            //该参数与游标类型AT_SEQUENCE_NUMBER、AFTER_SEQUENCE_NUMBER搭配使用
            const string startingSequenceNumber = "0";

            //AT_SEQUENCE_NUMBER:从特定序列号所在的记录开始读取。此类型为默认游标类型。
            //AFTER_SEQUENCE_NUMBER:从特定序列号后的记录开始读取。
            //TRIM_HORIZON:从分区中时间最长的记录开始读取。
            //LATEST:在分区中最新的记录之后开始读取,以确保始终读取分区中的最新数据。
            //AT_TIMESTAMP:从特定时间戳开始读取。
            const string shardIteratorType = "AT_SEQUENCE_NUMBER";

            var request = new GetShardIteratorRequest
            {
                //通道名称
                StreamName = streamName,
                //分区值
                ShardId = shardId,
                //序列号,可选参数
                StartingSequenceNumber = startingSequenceNumber,
                //游标类型,可选参数
                ShardIteratorType = shardIteratorType,
                //时间戳,可选参数
                Timestamp = timestamp
            };

            var recordsRequest = new GetRecordsRequest();
            var response       = dic.GetShardIterator(request);

            Console.Out.WriteLine(response);

            var iterator = response.ShardIterator;

            //下载数据,这里的进程不会退出,只要检测到有数据就下载数据
            while (true)
            {
                //数据游标。
                recordsRequest.ShardIterator = iterator;
                GetRecordsResult recordResponse = dic.GetRecords(recordsRequest);
                // 下一批数据游标
                iterator = recordResponse.NextShardIterator;

                if (recordResponse.Records.Count > 0)
                {
                    foreach (var record in recordResponse.Records)
                    {
                        Console.WriteLine("Record[{0}] = {1}", record.SequenceNumber, DecodeData(record.Data));
                    }
                    Thread.Sleep(1000);
                }
                else
                {
                    Thread.Sleep(1000);
                }
            }
        }