0 Tage Serie
java / expert
Snippet

Verteiltes Locking mit AOP und Redis

Nutzung von Aspektorientierter Programmierung (AOP), um deklaratives verteiltes Locking zu implementieren. Dies gewährleistet Thread-Sicherheit über mehrere Instanzen in einer Microservices-Umgebung, ohne die Geschäftslogik mit Infrastrukturfragen zu belasten.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Aspect
@Component
public class RedisLockAspect {
@Autowired
private RedissonClient redisson;
@Around("@annotation(distributedLock)")
public Object manageLock(ProceedingJoinPoint joinPoint, DistributedLock distributedLock) throws Throwable {
RLock lock = redisson.getLock(distributedLock.key());
if (lock.tryLock(distributedLock.waitTime(), distributedLock.leaseTime(), TimeUnit.SECONDS)) {
try {
return joinPoint.proceed();
} finally {
lock.unlock();
}
}
throw new RuntimeException("Could not acquire lock");
}
}
spring
Erklärung
1
@Around("@annotation(distributedLock)")
Unterbricht die Methodenausführung nur für Methoden, die mit unserem benutzerdefinierten @DistributedLock annotiert sind.
2
lock.tryLock(...)
Versucht, das Lock in Redis mit festgelegten Zeitüberschreitungs- und Mietbeschränkungen zu erwerben.
3
joinPoint.proceed()
Führt die ursprüngliche Geschäftsmethode erst aus, nachdem das Lock erfolgreich erworben wurde.