package com.dy.pipIrrRemote.msCenter; import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; import com.dy.pipIrrGlobal.util.Org; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.Timer; import java.util.TimerTask; /** * @Author: liurunyu * @Date: 2025/2/13 9:47 * @Description */ @Slf4j @Component public class Register2MwMsCenterListener extends Web2RtuMw implements ApplicationListener { @Autowired private Environment env; @Autowired private RestTemplate restTemplate; @Autowired protected ResourceLoader resourceLoader; @Value("${mw.mwMsCenterReceiveUrl_rm}") protected String mwMsCenterReceiveUrl;//消息接收网址 private static final String mwParamName = "msReceiverWebUrl" ; private List orgs; private Timer timer; /** * SpringBoot容器已经准备好了,执行下面方法 * * @param event 事件 */ @Override public void onApplicationEvent(@NonNull ApplicationReadyEvent event) { try { //等1秒,等待com.alibaba.druid.pool.DruidDataSource实始化完成 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } finally { try { this.start(event); } catch (Exception e) { log.error("向通信中间件注册消息接收者出错", e); } } } /** * 执行业务逻辑 * @param event * @throws Exception */ private void start(ApplicationReadyEvent event) throws Exception { if(mwMsCenterReceiveUrl == null || mwMsCenterReceiveUrl.trim().equals("")){ throw new Exception("通信中间件消息接收网址未配置"); } orgs = super.get(resourceLoader); if(orgs != null && orgs.size() > 0) { this.timer = new Timer(); this.timer.schedule(new TimerTask() { public void run() { register(event) ; } }, 100 , 5 * 60 * 1000); } } /** * 向通信中间件注册消息接收者 * @param event */ private void register(ApplicationReadyEvent event){ for (Org.OrgVo vo : this.orgs){ String rqUrl = this.get2MwRequestUrl(this.env, vo.tag, ContextRegisterMsReceiverWebUrl) ; sendGetRequest2Mw(restTemplate, rqUrl, mwParamName, mwMsCenterReceiveUrl) ; } } }