请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

实际生产环境中 实现一个分布式事务就需要写一个RoketMQLocalTransctionListener吗

正在回答 回答被采纳积分+3

3回答

elinor_0 2021-12-29 18:48:31

可以试试使用反射或者传递函数的方式

try{
            Map params=(Map)var2;
            Class c=(Class) params.get("class");
            Class[] argsClass=(Class[])params.get("argsClass");
            Object[] args=(Object[])params.get("args");
            String methodName=params.get("methodName").toString();
            Method method=c.getMethod(methodName,argsClass);
            method.invoke(c.newInstance(),args);
            return RocketMQLocalTransactionState.COMMIT;
        }catch (Exception e){
            return RocketMQLocalTransactionState.ROLLBACK;
        }

try{
            LocalListenerFunction function=(LocalListenerFunction)var2;
            function.execute();
            return RocketMQLocalTransactionState.COMMIT;
        }catch (Exception e){
            return RocketMQLocalTransactionState.ROLLBACK;
        }
https://blog.csdn.net/qq_41066277/article/details/122070210?spm=1001.2014.3001.5501

0 回复 有任何疑惑可以回复我~
  • 大目 #1
    点赞,是个路子
    回复 有任何疑惑可以回复我~ 2021-12-30 15:47:23
elinor_0 2021-12-29 18:44:13

可以通过函数式编程传递函数或者反射实现动态监听本地事务方法

0 回复 有任何疑惑可以回复我~
大目 2021-03-26 11:26:59

是的…所以并不方便…

0 回复 有任何疑惑可以回复我~
  • 老师,用反射的方式或者传递函数的方式进行优化,是否可以
    try{
                Map params=(Map)var2;
                Class c=(Class) params.get("class");
                Class[] argsClass=(Class[])params.get("argsClass");
                Object[] args=(Object[])params.get("args");
                String methodName=params.get("methodName").toString();
                Method method=c.getMethod(methodName,argsClass);
                method.invoke(c.newInstance(),args);
                return RocketMQLocalTransactionState.COMMIT;
            }catch (Exception e){
                return RocketMQLocalTransactionState.ROLLBACK;
            }
    
    try{
                LocalListenerFunction function=(LocalListenerFunction)var2;
                function.execute();
                return RocketMQLocalTransactionState.COMMIT;
            }catch (Exception e){
                return RocketMQLocalTransactionState.ROLLBACK;
            }
    https://blog.csdn.net/qq_41066277/article/details/122070210?spm=1001.2014.3001.5501
    回复 有任何疑惑可以回复我~ 2021-12-29 18:47:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信