我们将 SQL server 2012 作为 DB 服务器,将 Redhat Linux 上的 Websphere MQ 作为 MQ 服务器。我们的应用程序在 Redhat Linux 服务器上并用 C++ 实现。

我们需要分布式事务能力,以便事务可以跨越两种资源(DB 和 MQ)。分布式事务由跨资源的资源管理器工作的事务管理器管理。

如果单个资源管理器(DB 和 MQ)提供 XA 操作,则 WMQ 能够充当分布式事务管理器。
MS SQL 确实有一个适用于 Linux 的 ODBC 库: http://www.microsoft.com/en-us/download/details.aspx?id=28160

  • SQL Server库是否支持xa_open等XA操作,可以让它参与到WMQ管理的XA事务中?

  • 另一种选择是使用 MS 分布式事务协调器作为事务管理器。
  • 是否可以在 Linux 上运行的 C++ 程序中使用 MSDTC?
  • MSDTC 是否与作为资源管理器的 WMQ 一起工作?

  • 谢谢,
    亚什

    最佳答案

    我希望我有更好的消息告诉你......

    假设您在谈论 V8(尽管其他版本类似),那么在使用 MQ 作为事务管理器时根本不支持 MS SQL Server。您可以在 MQ SOE 的“数据库”部分看到这一点:

    http://www-969.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=1350550241693&osPlatform=Linux#sw-Databases

    MSDTC 可以使用,但据我所知只能由在 Windows 中运行的客户端使用 - 我不知道您如何使其适用于您的场景。

    另一种选择是使用 J2EE 环境(WAS/JBoss 等)。这将充当事务管理器,而 MS SQL 和 MQ 将充当资源。尽管如此,这并不能解决您用 C++ 编写的要求。

    因此,我为您提供的唯一真正有效的建议是:

    1) 查看 MQ 支持的事务管理器:
    http://www-969.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=1350550241693&osPlatform=Linux#sw-Transaction 服务器和网关

    遗憾的是,我不熟悉那里的选项的详细信息。

    2) 以 IBM 作为他们的客户提出“RFE”。这是他们提供的允许客户/外部方请求新功能的机制:

    http://www.ibm.com/developerworks/rfe/

    虽然不能保证它会被接受,或者它最终可能是哪个版本(或何时!)。

    关于sql-server-2012 - SQL Server 和 Websphere MQ 的分布式事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25305403/

    10-14 02:46