【问题标题】:Can not override DynamoDB endpoint for Java Kinesis Consumer无法覆盖 Java Kinesis Consumer 的 DynamoDB 终端节点
【发布时间】:2021-04-14 16:55:23
【问题描述】:

我无法通过 java-aws-sdk、localstack 和 java-aws-kcl 设置我的本地环境。创建消费者并尝试在我的本地环境中运行它后,我收到一个错误,表明我的凭据不正确。所以 Kinesis 消费者总是去真正的 Amazon DynamoDB,我不能把它指向我的 localstack dynamodb。问题是:如何将其指向我的本地 dynamodb?

有什么建议吗?

【问题讨论】:

    标签: java amazon-dynamodb amazon-kinesis amazon-kcl


    【解决方案1】:

    您必须将 Kinesis 和 DynamoDB 客户端连接到 localstak。 为此,您将需要 localStack 的 edgePort ,主机名。并形成一个本地堆栈边缘端口 URL。应该是这样的

    public class public class Host {
        private static final String LOCAL = "localhost";
        public static final String DOCKER = "docker-desktop";
    
        public String getName(){
            ProcessBuilder processBuilder =
                new ProcessBuilder()
                    .command("docker", "run", "--net", "host", "bash", "-c", "hostname", "-I");
    
            String hostname = null;
            try {
              Process process = processBuilder.start();
              BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
              hostname = reader.readLine().strip();
              int exitVal = process.waitFor();
              } catch (Exception e) {
                // log for exception
              }
            
             if (DOCKER.equals(hostname)) {
                return LOCAL_HOST;
            } else {
              return hostname;
            }
        }
    }
    

    现在您需要获取主机名并创建类似这样的 URL。

    String localStackUrl =
            String.format("http://%s:%s", new Host().getName(), edgePort);
    

    然后按如下方式创建客户端

    SdkHttpClient httpClient = ApacheHttpClient.builder()
                                               .maxConnections(50)
                                               .build();
    
    KinesisAsyncClient client =
            KinesisAsyncClient.builder()
                .region(Region.of(Localstack.getDefaultRegion()))
                .httpClient(httpClient)
                .credentialsProvider(provider)
                .endpointOverride(new URI(localStackUrl))
                .build();
    
      DynamoDbAsyncClient  dynamoClient =
            DynamoDbAsyncClient.builder()
                .region(Region.of(Localstack.getDefaultRegion()))
                .httpClient(httpClient)
                .credentialsProvider(provider)
                .endpointOverride(new URI(localStackUrl))
                .build();
    

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 2021-04-06
      • 1970-01-01
      • 2022-07-11
      • 2014-05-01
      • 1970-01-01
      • 2019-12-04
      • 2021-05-15
      • 1970-01-01
      相关资源
      最近更新 更多