AWS Lambdaで実行されるJavaモジュールがあります。つまり、モジュールの複数のインスタンスを同時に実行できます。Redisson分散ロックの最大許可数を設定する方法
モジュールは、特定のAPIにアクセスし、そこからデータを取得するために使用されます。問題は、APIが40までのAPI呼び出しを制限するリークバケットアルゴリズムを使用し、0.5秒ごとにAPI呼び出しが使用可能になることです。 このため、私はRequest limit exceeded
の例外を受け取ります。
これを解決するために、分散ロックを実装し、redissonをAWS ElastiCache(分散Redisクラスタ)と使用することに決めました。 redissonのドキュメントを確認した後、私はPermitExpirableSemaphore
を使用して、リースを使ってロックを作成できると判断しました(私の場合は500ミリ秒です)。
問題は、私はあなたがこれを行う方法を知っていますか40
に利用可能なパーミットを制限する方法を見つけることができないこと、ありますか?ここで
は、私のコードの例です:
Config config = new Config();
config.useElasticacheServers()
.setScanInterval(2000) // cluster state scan interval in milliseconds
.addNodeAddress("my.cache.amazonaws.com:6379");
RedissonClient redissonClient = Redisson.create(config);
RPermitExpirableSemaphore semaphore = redissonClient.getPermitExpirableSemaphore("mySemaphore");
String permitId = semaphore.acquire(500, TimeUnit.MILLISECONDS);
// Make the API call
semaphore.release(permitId);