消息队列及java for循环异常捕捉处理

消息队列及java for循环异常捕捉处理

1.定时任务查询需要的数据,减少处理的时间,通过消息队列的方式发送出来。
2.接收端接收到数据,然后查询相关的es等,封装数据入库
3.视图层直接查询入库的数据表,供后台管理界面显示

#DEMO CODE
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Objects;



@Component
public class DebtListener {

    private static final Logger logger = LoggerFactory.getLogger(DebtListener.class);


    /**
     * MQ接收到的欠款消息同步到ES
     * @param message
     */
    @RabbitListener(bindings = {@QueueBinding(value = @Queue(value ="队列名称", durable = "true"),
            exchange = @Exchange(value = "交换器名称", durable = "true", type = "topic"), key = "路由键名称")
    })
    public void process(Message message){
        try {
            String body = new String(message.getBody());
            List<DebtMq> DebtMqList =  JSONArray.parseArray(body, DebtMq.class);
            logger.info("MQ接收到的欠款消息,MessageBody:[{}]", JSON.toJSONString(DebtMqList));
            for (DebtMq DebtMq : DebtMqList) {
                try {
                    //查询ES,根据会员号查询ES中的会员信息
                    
                    //然后将欠款对象封装,入库
                    
                    //如果在循环中出现某个会员号查询es报错的时候,会导致该批次的循环下面的其他的会员的欠款都会中断。
                    
                    //所以需要将for循环中的业务处理逻辑块异常捕捉,相互之间互不影响。
                    
                } catch (Exception e) {
                    logger.error("DebtListener处理异常,会员号为:"+DebtMq.getMemNo(),e);
                }
            }
        } catch (Exception e) {
            logger.info("MQ接收到的欠款消息存入ES失败:[{}]", e);
        }
    }
}

 

posted on 2023-01-31 15:44  oktokeep  阅读(215)  评论(0编辑  收藏  举报