vvsuperman / coolmq

消息最终一致性方案,基于rabbitmq的分布式事务解决方案
657 stars 310 forks source link

发送普通消息时rabbitTemplate.setConfirmCallback回调方法msgId为null #19

Open ijaychang opened 6 years ago

ijaychang commented 6 years ago
        // 消息发送到RabbitMQ交换器后接收ack回调
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            if(returnFlag){
                logger.error("mq发送错误,无对应的的交换机,confirm回掉,ack={},correlationData={} cause={} returnFlag={}",
                        ack, correlationData, cause, returnFlag);
            }

            logger.info("confirm回调,ack={} correlationData={} cause={}", ack, correlationData, cause);
            String msgId = correlationData.getId();

            /** 只要消息能投入正确的消息队列,并持久化,就返回ack为true*/
            if(ack){
                logger.info("消息已正确投递到队列, correlationData:{}", correlationData);
                //清除重发缓存
                String dbCoordinatior = ((CompleteCorrelationData)correlationData).getCoordinator();
                DBCoordinator coordinator = (DBCoordinator)applicationContext.getBean(dbCoordinatior);
                coordinator.setMsgSuccess(msgId);
            }else{
                logger.error("消息投递至交换机失败,业务号:{},原因:{}",correlationData.getId(),cause);
            }

        });

coordinator.setMsgSuccess(msgId);报 java.lang.IllegalArgumentException: non null hash key required

vvsuperman commented 6 years ago

注解上的bizname设置了么?

ijaychang commented 6 years ago

@vvsuperman 发送不同消息也要加@TransMessage注解,设置bizname吗。不是很明白。。。

vvsuperman commented 6 years ago

普通消息么?不用@TransMessage?那应该去掉这个