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 808 forks source link

咨询下使用rpc-rest-ribbon,自定义HttpHeaders参数是否可以传递,用于多租户的身份识别,动态切换数据源 #31

Closed soedev closed 6 years ago

soedev commented 6 years ago

发送端加上header可以添加自定义内容即可,接收端有什么拦截器可以前置处理下

skyesx commented 6 years ago

easytransaction自身暂不支持,

除非使用底层rpc框架的filter自行实现(如restTemplate的interceptor),但这种实现不不能跨rpc框架使用(不能无缝切换到dubbo)

如果着急可以在EasyTransaction底层使用的restTemplate加入interceptor

不着急可以等到周末,我这边提供/暴露一个EasyTransaction层级的header修改方案

soedev commented 6 years ago

谢谢,不着急,我们这边还在熟悉框架中,如果补偿的时候,出现异常,存在未处理完成的事务,框架是否提供接口重试

skyesx commented 6 years ago

框架自动会重试,但要手工重试的话(用于测试等场景、或者用于界面手动触发重试),可以参考 https://github.com/QNJR-GROUP/EasyTransaction/blob/master/easytrans-starter/src/test/java/com/yiqiniu/easytrans/test/FullTest.java 这里的一段代码,如下

    List<LogCollection> unfinishedLogs = logReader.getUnfinishedLogs(null, 100, new Date());
    for (LogCollection logCollection : unfinishedLogs) {
        guardian.process(logCollection);
    }
skyesx commented 6 years ago

后来考虑了下,没有做成一个EasyTrans层次的Header配置,主要是因为不同底层RPC框架传输header形式不太一致,即使统一了也不见得能带来好处,因此只提供了修改 RestRibbon 下HttpHeader的方式,可以在SPRING中注入,EasyTransRpcConsumer,并强制转换为 RestRibbonEasyTransRpcConsumerImpl,这样可以调用方法

RestTemplate getLoadBalancedRestTemplate()

然后可以通过RestTemplate的interceptors来调整header