繁体   English   中英

DynamoDB 增强型客户端错误:无法解组响应

[英]DynamoDB Enhanced Client Error: Unable to unmarshall response

我是 DynamoDB 的新手,正在尝试编写一些 Java 代码来使用增强的 DynamoDB 客户端对具有 3 个线程的表进行并行扫描。 我正在使用 AWS Java SDK v 2.17.85。

我的代码在启动后不久在每个线程中抛出以下错误:无法解组响应(null)。 当我在单个线程中进行扫描时,一切正常。 我在文档中看到的所有示例似乎都是针对旧客户的。 我很感谢这里的专家提供的一些见解。 谢谢。

private static class ScanSegmentTask implements Runnable {

        private String tableName;
        private int itemLimit;
        private int totalSegments;
        private int segment;
        
        private long scannedItemCount = 0;

        public ScanSegmentTask(String tableName, int itemLimit, int totalSegments, int seg) {
            this.tableName = tableName;
            this.itemLimit = itemLimit;
            this.totalSegments = totalSegments;
            this.segment = seg;
        }

        @Override
        public void run() {
            System.out.println("Scanning " + tableName + " segment " + segment + " out of " + totalSegments
                + " segments " + itemLimit + " items at a time...");

            DynamoDbTable<TfProdHmiBean> hmiTable = enhancedClient.table(tableName, TableSchema.fromBean(TfProdHmiBean.class));
            try {

                ScanEnhancedRequest spec = ScanEnhancedRequest.builder().limit(itemLimit).segment(segment).totalSegments(totalSegments).build();
                Iterator<TfProdHmiBean> results = hmiTable.scan(spec).items().iterator();
                while (results.hasNext()) {
                    scannedItemCount++;
                    if (scannedItemCount % 1000000 == 0) {
                        System.out.println("Scanned " + scannedItemCount + " items from segment " + segment + " out of " + totalSegments);
                    }
                    results.next();
                }
            }
            catch (Exception e) {
                System.err.println("Error: " + e.getMessage() + " in segment " + segment);
            }
            finally {
                System.out.println("Scanned " + scannedItemCount + " items from segment " + segment + " out of "
                    + totalSegments + " of " + tableName);
            }
        }
        
    }

看来问题出在我提供给 SDK 以进行映射的 bean class 上。

我把电话从

DynamoDbTable hmiTable = enhancedClient.table(tableName, TableSchema.fromBean(TfProdHmiBean.class));

DynamoDbTable hmiTable = enhancedClient.table(tableName, TableSchema.fromClas(TfProdHmiBean.class));

然后我用 @DynamoDbAttribute(value="dynamo field name") 用 DynamoDB 中的源字段注释了每个字段的 get 方法

这行得通。 现在这对我的目的来说已经足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM