消息队列及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); } } }