热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

saga+.netcore分布式事务处理

ApacheServiceCombSaga是一个微服务应用的数据最终一致性解决方案中文官方地址:https:github.comapacheservicecomb-sagablob

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命令 

saga+.net core 分布式事务处理

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

saga+.net core 分布式事务处理

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

saga+.net core 分布式事务处理

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

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

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

saga+.net core 分布式事务处理

 

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

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

部署客户端

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

saga+.net core 分布式事务处理

主要的工作如下:

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

代码非常简单:

每个项目添加代码:

saga+.net core 分布式事务处理

 

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

saga+.net core 分布式事务处理

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

saga+.net core 分布式事务处理

 

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

saga+.net core 分布式事务处理

 


推荐阅读
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 标题: ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • Dockerfile构建镜像的指令和说明
    本文介绍了Dockerfile是用来构建镜像的文本文件,其中包含了构建镜像所需的指令和说明。通过创建一个Dockerfile文件并编写内容,可以快速创建自定义的镜像。文章还提供了一个示例,展示了如何使用Dockerfile创建一个本地构建的nginx镜像,并通过docker images命令查看镜像的版本。希望本文对大家的学习有所帮助,并希望大家多多支持编程笔记。 ... [详细]
author-avatar
美煤MM就
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有