/** * 每分钟执行一次事务回查 */ @Scheduled(fixedRate = 60 * 1000) public void checkTransactionMessage(){ messageService.check(); } }
@RequestMapping(value = "/reSend", method = RequestMethod.POST) public void reSend(@RequestBody MessageIdDTO dto) { List<ProducerTransactionMessageDO> messages = messageService.findByIds(dto.getIds()); for (ProducerTransactionMessageDO messageDO : messages) { messageDO.setMessageStatus(MessageStatus.UNCONSUMED); messageDO.setSendTimes(0); } messageService.reSend(messages); }
@RequestMapping(value = "/rollback", method = RequestMethod.POST) public void rollback(@RequestBody MessageIdDTO dto) { for (ProducerTransactionMessageDO message : messageService.findByIds(dto.getIds())) { accountService.rollback(message); } } }
@Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { log.info("接收到消息数量为:{}", msgs.size()); for (MessageExt msg : msgs) { Map<Long,MessageStatus> checkResult = null; try { String topic = msg.getTopic(); String keys = msg.getKeys(); checkResult = ProtoStuffUtil.deserialize(msg.getBody(), Map.class); log.info("消费者接收到消息:topic: {}, keys:{} , order: {}", topic, keys, checkResult); messageService.updateStatusAndReSend(checkResult); }catch (Exception e){ e.printStackTrace(); } } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }
@RequestMapping(value = "/query", method = RequestMethod.POST) public PageInfo<ProducerTransactionMessageDO> findByQueryDTO(@RequestBody MessageQueryConditionDTO queryDTO) { if (queryDTO.getPageNum() == null || queryDTO.getPageNum() <= 0) { queryDTO.setPageNum(Integer.valueOf(PageProperties.DEFAULT_PAGE_NUM)); } if (queryDTO.getPageSize() == null || queryDTO.getPageSize() <= 0) { queryDTO.setPageSize(Integer.valueOf(PageProperties.DEFAULT_PAGE_SIZE)); } return messageService.findByQueryDTO(queryDTO); }
@Transactional @Override public void rollback(ProducerTransactionMessageDO message) { OrderDO order = ProtoStuffUtil.deserialize(message.getBody(), OrderDO.class); message.setMessageStatus(MessageStatus.ROLLBACK); message.setUpdateTime(LocalDateTime.now()); messageService.update(message); payService.increaseAccount(order.getUser().getId(), order.getTotalPrice()); } }
.sendTimes(0) .build(); messageService.save(messageDO);