如何在 Spring Boot 项目中正确使用 AmazonDynamoDBLockClient?

问题描述 投票:0回答:1

我尝试使用 AmazonDynamoDBLockClient 获取锁定,DynamoDb 在本地主机上运行。 但我收到 NPE 说

Cannot invoke "software.amazon.awssdk.services.dynamodb.model.AttributeValue.s()" because "ownerName" is null

以下是项目结构

POM 中的依赖关系

<dependency>
 <groupId>software.amazon.awssdk</groupId>
 <artifactId>dynamodb-lock-client</artifactId>
 <version>1.2.0</version>
</dependency>

Bean 配置

@Bean
public DynamoDbClient dynamoDbClient(){
  return DynamoDbClient.builder()
         .endpointOverride(URI.create("http://localhost:8000"))
         .build();
}

@Bean
public AmazonDynamoDBLockClient amazonDynamoDBLockClient(){
 return new AmazonDynamoDBLockClient(AmazonDynamoDBLockClientOptions
    .builder(dynamoDbClient(), "table-name")
    .withPartitionKeyName("partition-key-name")
    .withOwnerName("owner-name") // I have put "app" here
    .withTimeUnit(TimeUnit.SECONDS)
    .withLeaseDuration(10L)
    .withHeartbeatPeriod(3L)
    .withCreateHeartbeatBackgroundThread(true)
    .build());
}

获取Lock方法

public Optional<LockItem> acquireLock(){
  return amazonDynamoDBLockClient.tryAcquireLock(AcquireLockOptions.builder("partitionKey").build();
}

如果您对这个问题有任何见解,我将不胜感激。

spring-boot amazon-dynamodb localhost locking
1个回答
0
投票

问题在于您实际上需要在表中包含所有者名称和其他字段。您将必须实现领导者选举算法。您可以关注这篇文章的一些详细信息:https://adityajindal.org/leader-election-using-dynamo-db-lock-client-b1f257ff6a7f

© www.soinside.com 2019 - 2024. All rights reserved.