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