| package com.ruoyi.integration.rocket.listener; | 
|   | 
| import com.ruoyi.integration.api.model.TimingSetting; | 
| import com.ruoyi.integration.api.model.TimingSettingReply; | 
| import com.ruoyi.integration.iotda.enums.ServiceIdMenu; | 
| import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; | 
| import com.ruoyi.integration.iotda.utils.tools.CP56Time2aConverter; | 
| import com.ruoyi.integration.iotda.utils.tools.MessageUtil; | 
| import com.ruoyi.integration.mongodb.service.TimingSettingReplyService; | 
| import com.ruoyi.integration.mongodb.service.TimingSettingService; | 
| import com.ruoyi.integration.rocket.model.TimingSettingMessage; | 
| import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.rocketmq.spring.annotation.MessageModel; | 
| import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; | 
| import org.apache.rocketmq.spring.core.RocketMQListener; | 
| import org.springframework.beans.BeanUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.util.Date; | 
|   | 
| @Slf4j | 
| @Component | 
| @RocketMQMessageListener( | 
|         messageModel = MessageModel.CLUSTERING, | 
|         consumerGroup = "charge_timing_setting", | 
|         topic = "charge_timing_setting", | 
|         selectorExpression = "timing_setting", | 
|         consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 | 
| ) | 
| public class TimingSettingMessageListener extends EnhanceMessageHandler<TimingSettingMessage> implements RocketMQListener<TimingSettingMessage> { | 
|   | 
|     @Autowired | 
|     private TimingSettingService timingSettingService; | 
|     @Override | 
|     protected void handleMessage(TimingSettingMessage message) throws Exception { | 
|         // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 | 
|         log.info("对时设置-业务消息处理:{}",message); | 
|         // 持久化消息 | 
|         TimingSetting timingSetting = new TimingSetting(); | 
|         BeanUtils.copyProperties(message,timingSetting); | 
|         timingSettingService.create(timingSetting); | 
|         // 业务处理 | 
|     } | 
|   | 
|     @Override | 
|     protected void handleMaxRetriesExceeded(TimingSettingMessage message) { | 
|         // 当超过指定重试次数消息时此处方法会被调用 | 
|         // 生产中可以进行回退或其他业务操作 | 
|         log.error("消息消费失败,请执行后续处理"); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 是否执行重试机制 | 
|      */ | 
|     @Override | 
|     protected boolean isRetry() { | 
|         return true; | 
|     } | 
|   | 
|     @Override | 
|     protected boolean throwException() { | 
|         // 是否抛出异常,false搭配retry自行处理异常 | 
|         return false; | 
|     } | 
|   | 
|     /** | 
|      * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 | 
|      * @param message 待处理消息 | 
|      * @return true: 本次消息被过滤,false:不过滤 | 
|      */ | 
|     @Override | 
|     protected boolean filter(TimingSettingMessage message) { | 
|         // 此处可做消息过滤 | 
|         return false; | 
|     } | 
|   | 
|     /** | 
|      * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 | 
|      */ | 
|     @Override | 
|     public void onMessage(TimingSettingMessage message) { | 
|         super.dispatchMessage(message); | 
|     } | 
| } |