1 dubbo接口用twophasebuisseness标注一组tcc接口时,调用方和被调用方都会有接口,如何识别服务引入的接口是调用方调用的引入还是实际的TCC执行者?
dubbo应用可以通过判断该接口是referenceBean还是serviceBean可以判断
可通过SPI扩展
具体处理类为RemotingParser的isReference和isService方法
isService就会上报RM资源信息
isReference就会设置代理,添加TccActionInterceptor
2 何时上报Resouce?
在执行GlobalScanner,调用TCCBeanParserUtils.isTccAutoProxy至DefaultRemotingParser.parserRemotingServiceInfo,判断是否为isService以及twoPhaseBusinessAction注解来上报Resource
3 globalTransactionScanner启动时作用?
globalTransactionScanner是AbstractAutoProxyCreator子类,在postProcessAfterInitialization阶段进行再处理
1 service Bean上报Resource
2 referenceBean记录remotingDesc,等调用referenceBean.get()实际生成代理Invoker类的时候再加上TCC拦截器
3 globalTransactional注解和GlobalLock注解增加globalTransaction拦截器
4 LocalTcc如何起作用?
LocalTcc可直接在TM测实现TCC资源,那么localTcc类属于TM本地调用,既需要添加TCC拦截器也需要上报资源,因此它对应的isService和isReference都会为true
5 seata-server如何高可用?
1 seata-server支持文件,redis, mysql多种存储,选择mysql可达到高可用特性
2 seata 客服端连接通过注册中心获取server节点地址,在发送消息时进行loadBalance连接
6 为何不直接AOP拦截twoPhaseBussinessAction ?
需要对reference和service执行不同逻辑
含有初始化上报RM的功能
网友评论