package io.muoncore.spring.mapping; import io.muoncore.Muon; import io.muoncore.spring.controllers.MuonControllersConfigurationHolder; import io.muoncore.spring.methodinvocation.MuonStreamMethodInvocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; public class MuonStreamSubscriptionService { List<StreamConnector> streamConnectors = new ArrayList<>(); ScheduledExecutorService monitor = Executors.newScheduledThreadPool(1); @Autowired private Muon muon; @Autowired private MuonControllersConfigurationHolder muonControllersConfigurationHolder; private static Logger LOG = LoggerFactory.getLogger(MuonStreamSubscriptionService.class.getName()); @PostConstruct public void startMonitoring() { monitor.scheduleAtFixedRate(() -> { LOG.debug("Checking connections"); for (StreamConnector streamConnector : streamConnectors) { if (!streamConnector.isConnected()) { try { LOG.info("Trying to reconnect to " + streamConnector.getMuonUrl()); streamConnector.safeConnectToStream(); } catch (URISyntaxException | UnsupportedEncodingException e) { e.printStackTrace(); } } } }, muonControllersConfigurationHolder.getStreamKeepAliveTimeout(), muonControllersConfigurationHolder.getStreamKeepAliveTimeout(), muonControllersConfigurationHolder.getTimeUnit()); } public void setupMuonMapping(String streamUrl, final MuonStreamMethodInvocation muonStreamMethodInvocation) { StreamConnector streamConnector = new StreamConnector(muon, streamUrl, muonStreamMethodInvocation); try { streamConnector.safeConnectToStream(); } catch (Exception e) { throw new MuonMappingException(e); } streamConnectors.add(streamConnector); } }