zoukankan      html  css  js  c++  java
  • saga+.net core 分布式事务处理

    Apache ServiceComb Saga 是一个微服务应用的数据最终一致性解决方案

    中文官方地址:https://github.com/apache/servicecomb-saga/blob/master/README_ZH.md

    特性

    • 高可用。支持集群模式。
    • 高可靠。所有的事务事件都持久存储在数据库中。
    • 高性能。事务事件是通过gRPC来上报的,且事务的请求信息是通过Kyro进行序列化和反序列化的。
    • 低侵入。仅需2-3个注解和编写对应的补偿方法即可进行分布式事务。
    • 部署简单。可通过Docker快速部署。
    • 支持前向恢复(重试)及后向恢复(补偿)。
    • 扩展简单。基于Pack架构很容实现多种协调机制。

    架构

    Saga Pack 架构是由 alpha 和 omega组成,其中:

    • alpha充当协调者的角色,主要负责对事务进行管理和协调。
    • omega是微服务中内嵌的一个agent,负责对网络请求进行拦截并向alpha上报事务事件。

    alpha可以简单理解是事务处理的服务端,

    omega是需要进行事务处理的客户端的SDK,在我的项目里,就是.net core应用程序的sdk,

    幸运的是官方提供了C#语言版本Omega 可参见 https://github.com/OpenSagas-csharp/servicecomb-saga-csharp

    数据库官方目前提供了两个:postpresql和mysql, 和alpha一样都可以通过docker快速部署, 

    部署服务端alpha-server

    下面开始部署服务端alpha-server:

    官方提供了用于快速部署的docker compose文件:

    version: '2'
     
    services:
      postgres:
        image: postgres
        container_name: postgres
        ports:
          - "5432:5432"
        environment:
          POSTGRES_USE: saga
          POSTGRES_USER: saga
          POSTGRES_PASSWORD: password
        networks:
          - saga
         
      alpha-server:
        image: djlnet/alpha-server:0.3.0-SNAPSHOT
        container_name: alpha-server
        ports:
          - "8080:8080"
          - "8090:8090"
        environment:
          JAVA_OPTS: -Dspring.profiles.active=prd -Dspring.datasource.url=jdbc:postgresql://postgres/saga?useSSL=false
        networks:
          - saga
        depends_on:
          - postgres
     
    networks:
     
      saga:
        driver: bridge

    也就是说我们的环境首先要安装docker 和 docker-compose

    安装成功后,我们运行docker-compose up -d命令 

    通过docker ps 可以看到容器已经启动:

    通过netstat -ntlp 可以看到端口已经开启:

    接下来,我们可以Navicat 12 for PostgreSQL 查看数据库是否正常

    下载安装地址:https://www.navicat.com/en/download/navicat-premium

    安装成功后,创建连接,测试连接:

    alpha-server运行成功的标志,目前还没有一个UI,只能通过端口号是否运行,来判断了。

    服务端的工作就已经完成了。

    部署客户端

    下面是客户端:可以直接参考上面链接中的github项目,里面提供了三个测试项目:

    主要的工作如下:

    1. 设置对alpha-server的连接,注册自己
    2. 在事务开始的方法的打上attribute:SagaStart
    3. 添加事务补偿方法

    代码非常简单:

    每个项目添加代码:

    在action方法上添加特性:SagaStart:

    事务补偿特性和补偿方法:

    部署完成后,就可以测试了,接口跑通后,就可以查看数据库那三张表:

  • 相关阅读:
    图片延迟加载
    JS 数组操作
    XML转成dataset
    Android的layout_weight使用方法
    Android五大布局学习笔记【转 有改动】
    JSONP
    Android中dip、dp、sp、pt和px的区别和使用
    捕鱼和分鱼
    Android中可能导致ActivityNotFoundException的一些问题总结
    一张图片引发的思考——Android图片加载
  • 原文地址:https://www.cnblogs.com/hankuikui/p/9953214.html
Copyright © 2011-2022 走看看