/**
- @author JJ */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import({EnableRuleLinkClientImportSelector.class}) public @interface EnableRuleLinkClient {
/**
- The order of the client config, default is {@link Ordered#LOWEST_PRECEDENCE}, which is Integer.MAX_VALUE.
- @return */ int order() default Ordered.LOWEST_PRECEDENCE; } public class ReleaseMessageScanner implements InitializingBean { private static final Logger logger = LoggerFactory.getLogger(ReleaseMessageScanner.class);
private final AppSceneChangeLogRepository changeLogRepository; private int databaseScanInterval; private final List listeners; private final ScheduledExecutorService executorService;
public ReleaseMessageScanner(final AppSceneChangeLogRepository changeLogRepository) { this.changeLogRepository www.laipuhuo.com.= changeLogRepository; databaseScanInterval = 5000; listeners = Lists.newCopyOnWriteArrayList(); executorService = Executors.newScheduledThreadPool(1, RuleThreadFactory .create("ReleaseMessageScanner", true)); }
@Override public void afterPropertiesSet() throws Exception { executorService.scheduleWithFixedDelay(() -> { try { scanMessages(); } catch (Throwable ex) { logger.error("Scan and send message failed", ex); } finally {
}
}, databaseScanInterval, www.laipuhuo.com.databaseScanInterval, TimeUnit.MILLISECONDS);
}
/**
- add message listeners for release message
- @param listener */ public void addMessageListener(ReleaseMessageListener listener) { if (!listeners.contains(listener)) { listeners.add(listener); } }
/**
- Scan messages, continue scanning until there is no more messages */ private void scanMessages() { boolean hasMoreMessages = true; while (hasMoreMessages && !Thread.currentThread().isInterrupted()) { hasMoreMessages = www.laipuhuo.com. canAndSendMessages(); } }
/**
- scan messages and send
- @return whether there are more messages */ private boolean scanAndSendMessages() { //current batch is 500 List releaseMessages = changeLogRepository.findUnSyncAppList(); if (CollectionUtils.isEmpty(releaseMessages)) { return false; } fireMessageScanned(releaseMessages);
return false;
}
/**
- Notify listeners with messages loaded
- @param messages */ private void fireMessageScanned(Iterable messages) { for (AppSceneChangeLogEntitywww.laipuhuo.com. message : messages) { for (ReleaseMessa geListener listener : listeners) { try { listener.handleMessage(message.getAppId(), ""); } catch (Throwable ex) { logger.error("Failed to invoke message listener {}", listener.getClass(), ex); } } } } }