分布式事务08 TCC框架示例——hmily
分布式事務 08 TCC框架示例——hmily
市面常見TCC框架
Seata :阿里云推出的組件,支持較多方案,主推AT(二階段+分布式鎖)
tcc-transaction:不和底層rpc耦合,使用dubbo,http,thrift,webservice都可
tx-lcn:支持常用的dubbo,springcloud框架,維護不頻繁,熱度有所下降
hmily:國內工程師開發,異步高性能TCC框架,適應國內環境
ByteTcc:國內開發,兼容JTA規范的TCC框架
EasyTransaction:柔性事務、TCC、SAGA、可靠消息等功能齊全,一站式解決
hmily框架
在Gitee上可以找到,demo位于hmily-demo模塊下
hmily框架demo——訂單扣減庫存
代碼配置與流程
先根據官方手冊,拉取代碼
hmily在代碼中的體現
在賬戶服務AccountServiceImpl中,通過使用@HmilyTCC注解,將方法聲明為TCC式分布式事務的方法
@Override
@HmilyTCC(confirmMethod = "confirm", cancelMethod = "cancel")
public boolean payment(final AccountDTO accountDTO) {
LOGGER.info("============執行try付款接口===============");
accountMapper.update(accountDTO);
return Boolean.TRUE;
}
可以看到@HmilyTCC注解中有兩個屬性,confirmMethod與cancelMethod。這兩個屬性需要填寫對應的方法名稱。
顧名思義,這兩個方法就是confirm階段與cancel階段處理事務的方法,連同將方法體本身作為try階段,共同組成了TCC分布式事務的三要素。
對應著可以看下confirm方法與cancel方法
/**
* Confirm boolean.
*
* @param accountDTO the account dto
* @return the boolean
*/
public boolean confirm(final AccountDTO accountDTO) {
LOGGER.info("============執行confirm 付款接口===============");
return accountMapper.confirm(accountDTO) > 0;
}
/**
* Cancel boolean.
*
* @param accountDTO the account dto
* @return the boolean
*/
public boolean cancel(final AccountDTO accountDTO) {
LOGGER.info("============執行cancel 付款接口===============");
return accountMapper.cancel(accountDTO) > 0;
}
此時也能看到TCC模型的些許弊端:一個接口需求,需要寫至少三個方法來保證TCC三要素,并且這三個方法需要開發者自己思考業務進行正向操作與反向操作的雙向開發。
關鍵注解
@HmilyTCC與@Hmily
RPC上面的Hmily注解的作用只是用于連接前后兩個微服務的,使它們處于同一個分布式事務之下。
比如Feign調用的庫存服務:
@FeignClient(value = "inventory-service")
public interface InventoryClient {
/**
* 庫存扣減.
*
* @param inventoryDTO 實體對象
* @return true 成功
*/
@RequestMapping("/inventory-service/inventory/decrease")
@Hmily
Boolean decrease(@RequestBody InventoryDTO inventoryDTO);
/**
* 模擬庫存扣減異常.
*
* @param inventoryDTO 實體對象
* @return true 成功
*/
@Hmily
@RequestMapping("/inventory-service/inventory/mockWithTryException")
Boolean mockWithTryException(@RequestBody InventoryDTO inventoryDTO);
}
各個微服務內部的@HmilyTCC才是真正用于處理分布式事務的(執行try,confirm,canel,維護事務日志等),如上文說的三段式方法。
流程分析
總結
以上是生活随笔為你收集整理的分布式事务08 TCC框架示例——hmily的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频帧率和分辨率对QoE的影响
- 下一篇: .NET中各种数据库连接大全[转]