QNJR-GROUP / EasyTransaction

A distribute transaction solution(分布式事务) unified the usage of TCC , SAGA ,FMT (seata/fescar AutoCompensation), reliable message, compensate and so on;
Apache License 2.0
2.36k stars 809 forks source link

EtReliableMsgAnnotationBusinessProviderBuilder 和 EtBestEffortMsgAnnotationBusinessProviderBuilder执行consume,永远返回EasyTransConsumeAction.CommitMessage,这是不是有问题? #138

Closed andres818 closed 4 years ago

andres818 commented 4 years ago

Describe the bug 可靠消息和最大努力消息消费, EtReliableMsgAnnotationBusinessProviderBuilder 和 EtBestEffortMsgAnnotationBusinessProviderBuilder这两个类中执行consume,在“case MessageBusinessProvider.CONSUME:”返回结果写死EasyTransConsumeAction.CommitMessage,这是不是有问题?业务代码中返回EasyTransConsumeAction.ReconsumeLater 也被置为CommitMessage了 是否应该是直接: return targetMethod.invoke(springProxiedBean, args);

` Object msgProvider = Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] {BestEffortMessageHandler.class,RequestClassAware.class}, new InvocationHandler() {

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

            Object springProxiedBean = getApplicationContext().getBean(beanName);

            switch(method.getName()) {
            case BusinessProvider.GET_IDEMPOTENT_TYPE:
                return providerAnn.idempotentType();
            case RequestClassAware.GET_REQUEST_CLASS:
                return finalRequestClass;
            case MessageBusinessProvider.CONSUME:
                targetMethod.invoke(springProxiedBean, args);
                return EasyTransConsumeAction.CommitMessage;
            default:
                throw new RuntimeException("not recognized method!" + method);
            }
        }
    });`
skyesx commented 4 years ago

确实有问题,应可直接 return 调用的返回值。

但由于测试案例以及业务里基本都没有主动返回ReconsumeLater而是直接抛出异常以终止,所以没有发现这个BUG

能否帮忙提个PR修正这个问题?