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:

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

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

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/hankuikui/p/9953214.html
Copyright © 2011-2022 走看看