标签: distributed-transactions

MSDTC 尝试在分布式事务中登记客户端计算机

我们看到 MSDTC 记录了以下间歇性警告:

调用者尝试将事务传播到远程系统,但 MSDTC 网络 DTC 访问当前在计算机“X”上被禁用。请检查 MS DTC 配置设置。

然而,MSDTC 在设计上在机器 X 上被禁用 - 它是一台客户端机器,并且没有业务参与事务!

  • 通过 TCP 托管 WCF 服务的多个 Windows 服务端点
  • 下面的单个 SQL Server 2005 实例
  • Linq 到 Sql
  • 远程客户端通过 WCF/TCP 接收事件回调

该问题很难重现 - 通常在服务重新启动后。我们怀疑在事务上下文中发生了对客户端计算机的回调。

只是想知道是否有人见过类似的问题?

c# msdtc distributed-transactions system.transactions linq-to-sql

5
推荐指数
0
解决办法
2058
查看次数

Java:多线程内的 XA 事务传播

如何在 Java SE(不是 Java EE 或 Spring)中使用事务管理器(例如BitronixJBoss TSAtomikos)来支持以下用例:

假设我们有以下类:

public class Dao {

    public void updateDatabase(DB db) {
        connet to db
        run a sql
    }

}
Run Code Online (Sandbox Code Playgroud)

我们从中创建一个 Java Runnable,如下所示:

public class MyRunnable extends Runnable {

    Dao dao;
    DB db;

    public MyRunnable(Dao dao, DB db) {
        this.dao=dao;
        this.db = db;
    }           

    public run() throws Exception {
        return dao.updateDatabase(db);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在我们的服务层中,我们有另一个类:

public class Service {

    public void updateDatabases() {

        BEGIN TRANSACTION;

        ExecutorService es = Executors.newFixedThreadPool(10); …
Run Code Online (Sandbox Code Playgroud)

java jboss transactions distributed-transactions atomikos

5
推荐指数
1
解决办法
3749
查看次数

Azure SQL数据库是否支持两阶段提交(2PC)?

因为我在提交期间有几个不相关的资源来协调,所以我想在Java SQL数据库(JDBC)上使用两阶段提交(2PC).

在标准SQL Server上,您可以执行某些DLL 的复杂安装以及一些脚本以提供一些扩展存储过程,其名称类似于,xp_sqljdbc_xa_init或者xp_sqljdbc_xa_prepare反过来,Microsoft JDBC驱动程序用于提供start/end/prepare /的XA语义承诺.但是从我看到的这些扩展存储过程在Azure上不可用.

此外,SQL Server本身似乎没有任何PREPARE TRANSACTION原语,我也没有在Azure中找到它.

那么如何在Azure上做2PC?

sql-server jdbc distributed-transactions azure azure-sql-database

5
推荐指数
1
解决办法
832
查看次数

两阶段提交:可用性、可扩展性和性能问题

我读了很多文章并感到困惑。

\n\n

意见 1:\n2PC 非常高效,交换的消息数量最少且延迟较低。\n来源:\n http://highscalability.com/paper-consensus-protocols-two-phase-commit

\n\n

意见2:\n分布式事务很难扩展到高水平,而且会降低吞吐量。由于2PC保证ACID,由于其复杂的协调算法,带来了很大的负担。\n来源:http ://ivoroshilin.com/2014/03/18/distributed-transactions-and-scalability-issues-in-large-scale-distributed -系统/

\n\n

意见3:\n\xe2\x80\x9c一些作者声称两阶段提交的支持成本太高,因为\n它带来了性能或可用性问题。我们认为,最好让应用程序程序员处理由于过度使用事务而出现的性能问题,而不是总是围绕事务的缺乏进行编码。在 Paxos 上运行\n两阶段提交可以缓解可用性问题。\xe2\x80\x9d\n来源:http ://courses.cs.washington.edu/courses/csep552/13sp/lectures/6/spanner.pdf

\n\n

意见 4:\n2PC 协调器还代表单点故障,这对于关键系统来说是不可接受的 - 我相信它是协调器。\n来源:http://www.addsimplicity.com/adding_simplicity_an_engi/2006/12/2pc_or_not_2pc_。 html

\n\n

前3种意见相互矛盾。第4条我认为是正确的。请澄清什么是错误的,什么是正确的。如果能够给出事实,那就太好了。

\n

database scalability 2phase-commit distributed-transactions consensus

5
推荐指数
1
解决办法
2326
查看次数

如何实现Web服务交易?

是否有一个用于编排 Web 服务的 Java 工具,可以轻松处理事务?

在我的用例中,我想要链接 2 个 SOAP Web 服务:第一个将执行记入客户银行帐户的借记操作,第二个将为他的手机充值相应的金额。如何以事务方式实现此 Web 服务调用序列?

我简要地了解了 Apache Camel,但它似乎不是最合适的工具。

谢谢。

java distributed-transactions

5
推荐指数
1
解决办法
6181
查看次数

如何使用基于Spring Cloud架构的hystrix回退实现分布式事务

我正在使用spring cloud来实现我的微服务系统,一个售票平台.场景是,有一个zuul代理,一个eureka注册表和3个服务:用户服务,订单服务和票务服务.服务使用假装声明式REST客户端相互通信.

现在有一个买票的功能,主要流程如下:
1.订单服务接受请求创建订单
2.订单服务创建订单实体具有挂单状态.
3.订购服务呼叫用户服务来处理用户付费.
4.订购服务电话票务服务以更新用户票证.
5.订单服务将订单实体更新为FINISHED.

我想Hystrix Fallback用来实现交易.例如,如果付款流程已完成,但在票证移动期间发生了一些错误.如何尊重用户付款和订单状态.因为用户付款是在其他服务中.

以下是我目前的解决方案,我不确定它是否合适.或者还有其他更好的方法来做到这一点.

首先,OrderResource:

@RestController
@RequestMapping("/api/order")
public class OrderResource {

  @HystrixCommand(fallbackMethod = "createFallback")
  @PostMapping(value = "/")
  public Order create(@RequestBody Order order) {
    return orderService.create(order);
  }

  private Order createFallback(Order order) {
    return orderService.createFallback(order);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后是OrderService:

@Service
public class OrderService {

    @Transactional
    public Order create(Order order) {
        order.setStatus("PENDING");
        order = orderRepository.save(order);

        UserPayDTO payDTO = new UserPayDTO();
        userCompositeService.payForOrder(payDTO);

        order.setStatus("PAID");
        order = orderRepository.save(order);

        ticketCompositeService.moveTickets(ticketIds, currentUserId);

        order.setStatus("FINISHED");
        order = orderRepository.save(order);
        return order;
    }

    @Transactional …
Run Code Online (Sandbox Code Playgroud)

distributed-transactions hystrix microservices spring-cloud spring-cloud-netflix

5
推荐指数
1
解决办法
1641
查看次数

无法获取连接。连接可能未正确配置,或者您可能对此连接没有正确的权限

我在尝试执行包时收到以下错误。我可以成功地执行个人任务。但每当尝试执行整个包时,它都会给我错误。 分布式事务上的 SSIS 数据流 - [执行 SQL 任务] 错误:无法获取连接“targetCon2”。连接可能未正确配置,或者您可能对此连接没有正确的权限。

我浏览了很多链接,但没有任何效果,所以开始一个新线程。我检查了SQL 代理作业 - 连接可能未正确配置,或者您可能对此连接没有正确的权限?

由于“获取连接”错误,SSIS 包失败

SSIS 包失败并出现“无法获取连接”错误

我的分布式事务服务正在运行。DTC 设置正确。我正在按顺序执行所有事情。不知道出了什么问题。我想在一笔交易中执行整个部分。

请检查屏幕截图以了解更多详细信息。 项目快照和错误

sql-server ssis distributed-transactions

5
推荐指数
1
解决办法
1万
查看次数

.NET TransactionScope 和 MSDTC

在我的代码中有要处理的事务:

using (var scope = new TransactionScope())
{
  repo1.SaveSomething();
  repo2.SaveAnythingElse();
  scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

在 repo1 和 repo2 函数内部使用 using 创建自己的数据库上下文,并处理它们,事务就像一个魅力。

现在我添加另一个这样的代码,它开始丢弃一个异常:

底层提供程序在 Open 上失败。(EntityFramework) 分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中为网络访问启用 DTC。(System.Transactions) 事务管理器已禁用对远程/网络事务的支持。

我读到当连接在事务内部打开时,尽管具有相同的 sql server 相同的 db - 它需要 MSDTC 组件来处理它。我将代码更改为以下内容:

using (var scope = new TransactionScope(TransactionScopeOption.Required, 
new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted }))
{
   ....
   scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

现在异常消失了。

我的问题:

  • 为什么之前代码中使用的事务从不丢弃异常?
  • 为什么新代码会丢弃它?
  • 更改后为什么不再下降?

我认为简单的问题:) 任何帮助将不胜感激!

c# msdtc entity-framework transactions distributed-transactions

5
推荐指数
1
解决办法
2876
查看次数

什么是交易边界?

我已经阅读了这篇文章(假设我已经知道什么是事务边界)和这个 SO 问题(无法从该问题中破译事务边界的含义)。换句话说,我发现没有明确的定义或尝试定义事务边界。我明白什么是 100% 转换,但概念上的事务边界是什么

java transactions jta distributed-transactions jakarta-ee

5
推荐指数
1
解决办法
3521
查看次数

跨多个微服务的 2PC 分布式事务?

我阅读了一些关于2 Phase Commit/XA 分布式事务以及 JTA 如何支持它的信息。似乎有许多资源管理器 - RM(例如 RDBMS 或 JMS),以及一个管理跨多个 RM 的全局事务的TransactionManager (TM)实例。 TM <-> RM 通讯

我知道最好使用Saga 模式,但想想还是很有趣的:

  1. 2PC/XA 分布式事务是否提供了仅从一个应用程序和一个 TM 与许多 RM 进行事务处理的可能性?
  2. 如果没有 - 如何在许多微服务之间使用2PC/XA 分布式事务来提供使用 2PC 的能力,如果每个微服务只能访问自己的数据库?我很高兴看到一个例子
  3. 我们是否需要使用TransactionManager服务作为单独的微服务来提供许多微服务之间的 2PC?

UPD: 在 JTA 世界 TransactionManager 中,不提供用于跨微服务管理事务的REST API。LIXA 提供了这种能力。除答案外还附有示例的文章:)

java 2phase-commit distributed-system distributed-transactions microservices

5
推荐指数
1
解决办法
265
查看次数