| 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<ApplicationReadyEvent> { | 
|     @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<Org.OrgVo> 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) ; | 
|         } | 
|     } | 
| } |