package com.zy.acs.gateway.listen; import com.alibaba.fastjson.JSON; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.domain.AgvCommand; import com.zy.acs.common.domain.AgvProtocol; import com.zy.acs.gateway.config.SystemProperties; import com.zy.acs.gateway.domain.AgvPackage; import com.zy.acs.gateway.job.DispatcherPublisher; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.gateway.utils.ProtocolUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; /** * 下行报文监听器 * 消息队列: redis list * Created by vincent on 2019-04-02 */ @Component public class MessageListener { private Thread thread; private final RedisSupport redis = RedisSupport.defaultRedisSupport; private final static Logger log = LoggerFactory.getLogger(MessageListener.class); @Autowired private DispatcherPublisher publisher; @Autowired private SystemProperties systemProperties; @PostConstruct private void start(){ thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { AgvProtocol protocol = redis.pop(RedisConstant.AGV_CMD_DOWN_FLAG); if (null != protocol){ if (systemProperties.isPrintPacLog()) { log.info("监听器 >>> {}", JSON.toJSONString(protocol)); } if (!StringUtils.isEmpty(protocol.getAgvNo())){ publisher.publish(ProtocolUtils.installDownProtocol(protocol)); } } // 间隔 try { Thread.sleep(1000); } catch (Exception ignore) {} } }); thread.start(); } @PreDestroy public void shutDown(){ if (thread != null) thread.interrupt(); } }