添加检查点时不消耗记录

时间:2018-06-25 16:09:07

标签: spring-integration amazon-kinesis spring-integration-aws

我对KinesisMessageDrivenChannelAdapter具有以下配置,当我删除dynamoDbMetaDataStore作为检查点时,可以正确接收消息,但是当我将其添加回记录时,记录始终为空。 我调试了代码,KinesisMessageDrivenChannelAdapter.processTask()行776(版本2.0.0.M2)返回空记录。

更新:

public DynamoDbMetaDataStore dynamoDbMetaDataStore() {
    String url = consumerClientProperties.getDynamoDB().getUrl();
    final AmazonDynamoDBAsync amazonDynamoDB = AmazonDynamoDBAsyncClientBuilder.standard()
        .withEndpointConfiguration(new EndpointConfiguration(
            url,
            Regions.fromName(awsRegion).getName()))
        .withClientConfiguration(new ClientConfiguration()
            .withMaxErrorRetry(consumerClientProperties.getDynamoDB().getRetries())
            .withConnectionTimeout(consumerClientProperties.getDynamoDB().getConnectionTimeout())).build();
    DynamoDbMetaDataStore dynamoDbMetaDataStore = new DynamoDbMetaDataStore(amazonDynamoDB, "consumer-test");
    return dynamoDbMetaDataStore;
  }

  public KinesisMessageDrivenChannelAdapter kinesisInboundChannel(
      AmazonKinesis amazonKinesis, String[] streamNames) {
    KinesisMessageDrivenChannelAdapter adapter =
        new KinesisMessageDrivenChannelAdapter(amazonKinesis, streamNames);
    adapter.setConverter(null);
    adapter.setOutputChannel(kinesisReceiveChannel());
    adapter.setCheckpointStore(dynamoDbMetaDataStore());
    adapter.setConsumerGroup(consumerClientProperties.getName());
    adapter.setCheckpointMode(CheckpointMode.manual);
    adapter.setListenerMode(ListenerMode.record);
    adapter.setStartTimeout(10000);
    adapter.setDescribeStreamRetries(1);
    adapter.setConcurrency(10);
    return adapter;
  }

谢谢

1 个答案:

答案 0 :(得分:0)

我建议您使用最新的; with cte as ( select *, rn= row_number() over(partition by CustName order by RecordedTime), rn2=row_number() over(partition by CustName order by RecordedTime desc) from records ) , cte2 as ( select *, audit='New', History='Change' from cte where rn=1 union select *, audit='Change', History='Current' from cte where rn2=1 and rn<>1 union select *, audit='Change', History='before' from cte where rn>1 and rn2<>1 ) select CustName, Country, RecordedTime, audit, History from cte2 order by CustName,RecordedTime 测试解决方案。

已经有类似的选项:

2.0.0.BUILD-SNAPSHOT

您需要在其中注入/** * Specify a {@link LockRegistry} for an exclusive access to provided streams. * This is not used when shards-based configuration is provided. * @param lockRegistry the {@link LockRegistry} to use. * @since 2.0 */ public void setLockRegistry(LockRegistry lockRegistry) { 以便进行更好的检查点管理。

为此,您还需要添加此依赖项:

DynamoDbLockRegistry

compile("com.amazonaws:dynamodb-lock-client:1.0.0") 中确实存在一些过滤问题...