Himly TCC Dubbo 程序示例

本文提供了一个Himly TCC在Dubbo环境中的程序示例,详细介绍了如何运行工程、配置环境以及编写代码。通过运行基础服务和业务层测试,展示TCC如何处理分布式事务,特别是在转账场景中的应用。文章还提供了相关资源链接以便深入理解TCC和RPC概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Himly TCC Dubbo 程序示例


工程运行说明

  • 1.运行底层基础服务(provider):account工程下的 AccountServiceApplication
  • 2.运行业务层测试:transaction工程下的 TransactionServiceApplication

    完整的项目工程地址:RPC-Demo

相关思路和原理

    需要了解两个概念:TCC和RPC,可以参考下面两个Demo的思路部分说明:

    下面简单说下思路:

    根据之前缩写的TCC Demo程序的思路,使用 TCC 就是为了将 confirm和cancel的操作委托给第三方,在程序本身程序try后,由TCC第三方来推动进行下面的阶段

    结合Dubbo的话,根据RPC的思路,为了简化客户端(provider)的使用,具体的函数调用都放到基础服务端

    以本程序为例,大致流程图如下:

在这里插入图片描述

    可以看到阶段一(try阶段)都是程序本身在使用RPC的方式进行调用执行

    后面的confirm和cancel由TCC框架来进入RPC调用执行(在himly中全局的那个切面中)

    从日志运行中也可以看出,具体的调用日志全打印在基础工程(Account)中

代码编写

    简化操作,就将Api和provider层放到一起了,大致就下面两个步骤:

  • 1.provider(Account基础服务编写):提供账号金额操作,作为Dubbo中的Provider
  • 2.consumer(Transection上层服务编写):进行A和B用户的转账,作为Dubbo的Consumer

环境配置

    Dubbo需要zookeeper,这里使用docker进行启动,方便使用:

# 第一次启动zk
docker run -dit --name zk -p 2181:2181 zookeeper

# 曾经启动过zk,则可以:停止、启动、重启 zk
docker stop/start/restart zk

1.provider(Account基础服务编写):提供账号金额操作,作为Dubbo中的Provider

    首先编写API和具体实现,大致代码如下:

public interface AccountService {
   
   

    /**
     * 美元账户和人民币账户交易
     * @param account account
     * @return bool
     */
    @Hmily
    boolean pay(Account account);
}


@Slf4j
@Service("accountService")
public class AccountServiceImpl implements AccountService {
   
   

    @Autowired
    private AccountMapper accountMapper;

    @Override
    @HmilyTCC(confirmMethod = "confirm", cancelMethod = "cancel")
    public boolean pay(Account account) {
   
   
        boolean isSuccess = accountMapper.payment(account);
        log.info("py account : + " + account.getId() + " try result: " + isSuccess);
        log.info("py account : + " + account.getId() + " try data: " + accountMapper.queryOne(account));
        return isSuccess;
    }

    @Transactional(rollbackFor = Exception.class)
    public boolean confirm(Account account) {
   
   
        log.info("============dubbo tcc 执行确认付款接口===============");
        log.info("param account : " + account.toString());
        return true;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值