日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

分布式事务08 TCC框架示例——hmily

發布時間:2023/12/13 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 分布式事务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注解中有兩個屬性,confirmMethodcancelMethod。這兩個屬性需要填寫對應的方法名稱。

顧名思義,這兩個方法就是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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。