prontera / spring-cloud-rest-tcc

以Spring Cloud Netflix作为服务治理基础, 展示基于tcc思想所实现的分布式事务解决方案
2.58k stars 1.21k forks source link

代码有点小BUG #3

Closed Mrshengjie closed 7 years ago

Mrshengjie commented 7 years ago

tcc-coordinator-ms->CoordinateService->66行: final ResponseEntity response = restTemplate.exchange(participant.getUri(), HttpMethod.PUT, REQUEST_ENTITY, String.class); 此句是否应该先用LoadBalancerClient.choose(serviceId)得出ServiceInstance.getUri() 然后与participant.getUri()拼接,再用restTemplate.exchange(此新的uri). 不然所有的事件资源回调链接都调不通啊.

Mrshengjie commented 7 years ago

1.并且帐户服务的金额永远没有变动啊,即使确认了定单(帐户的过期补偿是否一应该放到它里面?) 2.定单里过期的功能好像无效 3.以上过期处理是不是应该有TCC来统一完成定时处理.是不是TCC应该有一套自己的表?

Mrshengjie commented 7 years ago

对了,您的代码写的确实很棒,值得学习.

prontera commented 7 years ago

@Mrshengjie 十分感谢您对我的代码表示肯定。

此句是否应该先用LoadBalancerClient.choose(serviceId)

对于整合了@LoadBalanced的RestTemplate会自动搜索服务注册列表,通过Ribbon向真正的物理地址发起请求。

论据如下:resttemplate_as_a_load_balancer_client

  1. 余额没有变动,库存也不会变动。猜测的原因与您上面所说的问题有关联,另外的话如果确认的是一张已经成功的订单,那么根据接口幂等性是绝不会对系统造成额外的余额扣减。

  2. 如果订单自动撤销无效,请先确认MySQL镜像的时间是否与宿主机一致。

  3. rest tcc的过期自动撤销功能必须由具体业务方所提供,其中tcc coordinator正如其名他只是作为一个协调器所使用,原论文有过建议将协调器所接收的TCC请求先作数据固化以防止协调器宕机,但我认为协调器不应该在调用方不知情的情况自发发起请求,所以网络抖动或协调器宕机的情况皆由TCC业务方发起重试所解决。

tikejc commented 7 years ago

请问一下作者,能够介绍一下你这些项目是如何运行的呢,项目与项目之间的关系是怎样的呢

tikejc commented 7 years ago

我想在windows下用idea运行,windows下只有java开发环境,需要安装其他的东西吗,比如说docker

prontera commented 7 years ago

@xiongchaofs 您好,关于项目的运行及项目之间的关系均已在README中详细描述,如有其他问题可以新开一个issue,感谢您的关注。