|
|
@ -15,21 +15,27 @@ |
|
|
*/ |
|
|
*/ |
|
|
package org.thingsboard.server.queue.discovery; |
|
|
package org.thingsboard.server.queue.discovery; |
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.slf4j.Logger; |
|
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.springframework.context.ApplicationListener; |
|
|
import org.springframework.context.ApplicationListener; |
|
|
import org.thingsboard.server.queue.discovery.event.TbApplicationEvent; |
|
|
import org.thingsboard.server.queue.discovery.event.TbApplicationEvent; |
|
|
|
|
|
|
|
|
import java.util.concurrent.locks.Lock; |
|
|
import java.util.concurrent.locks.Lock; |
|
|
import java.util.concurrent.locks.ReentrantLock; |
|
|
import java.util.concurrent.locks.ReentrantLock; |
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
|
|
public abstract class TbApplicationEventListener<T extends TbApplicationEvent> implements ApplicationListener<T> { |
|
|
public abstract class TbApplicationEventListener<T extends TbApplicationEvent> implements ApplicationListener<T> { |
|
|
|
|
|
|
|
|
private int lastProcessedSequenceNumber = Integer.MIN_VALUE; |
|
|
private int lastProcessedSequenceNumber = Integer.MIN_VALUE; |
|
|
private final Lock seqNumberLock = new ReentrantLock(); |
|
|
private final Lock seqNumberLock = new ReentrantLock(); |
|
|
|
|
|
|
|
|
|
|
|
private final Logger log = LoggerFactory.getLogger(getClass()); |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void onApplicationEvent(T event) { |
|
|
public void onApplicationEvent(T event) { |
|
|
|
|
|
if (!filterTbApplicationEvent(event)) { |
|
|
|
|
|
log.trace("Skipping event due to filter: {}", event); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
boolean validUpdate = false; |
|
|
boolean validUpdate = false; |
|
|
seqNumberLock.lock(); |
|
|
seqNumberLock.lock(); |
|
|
try { |
|
|
try { |
|
|
@ -40,7 +46,7 @@ public abstract class TbApplicationEventListener<T extends TbApplicationEvent> i |
|
|
} finally { |
|
|
} finally { |
|
|
seqNumberLock.unlock(); |
|
|
seqNumberLock.unlock(); |
|
|
} |
|
|
} |
|
|
if (validUpdate && filterTbApplicationEvent(event)) { |
|
|
if (validUpdate) { |
|
|
try { |
|
|
try { |
|
|
onTbApplicationEvent(event); |
|
|
onTbApplicationEvent(event); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
|