@Import({EnableRuleLinkClientImportSelector.class})

32 阅读1分钟

/**

  • @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); } } } } }