根据 X/Open 分布式事务模型,分布式事务支持依赖于分布式事务管理器,后者跟踪并管理一个或多个资源管理器所执行的操作。在 Message Queue 4.2 中,Message Queue C-API 现在支持 XA 接口(位于分布式事务管理器和 Message Queue 之间,作为符合 XA 的资源管理器),以使分布式事务处理环境(如 BEA Tuxedo)中运行的 Message Queue C-API 客户端能够参与分布式事务。
这种分布式事务支持包含以下用于实现 XA 接口规范的新 C-API 函数(以及新参数和错误代码):
MQGetXAConnection() MQCreateXASession()
如果要在分布式事务上下文中使用 C 客户端应用程序,该应用程序必须使用 MQGetXAConnection() 获取连接,并使用 MQCreateXASession() 创建会话以生成和使用消息。任何分布式事务的启动、提交和回滚操作都是通过分布式事务管理器提供的 API 进行管理的。
X/Open XA 接口规范需要以下有关符合 XA 的 Message Queue 资源管理器的公共信息:
xa_switch_t 结构名称:sun_my_xa_switch
资源管理器名称:SUN_RM
要链接的 MQ C-API 库:mqcrt
xa_close 字符串和格式:无
xa_open 字符串和格式:以 ";" 分隔的名称=值对
支持以下名称/值对:
表 1–6 Message Queue 资源管理器名称/值对
名称 |
值 |
描述 |
默认值 |
---|---|---|---|
address |
host:port |
代理的端口映射器服务的主机:端口。 |
localhost:7676 |
username |
字符串 |
用于连接到代理的用户名 |
guest |
password |
字符串 |
用户名的密码 |
guest |
conntype |
TCP 或 SSL |
连接代理的协议类型 |
TCP |
trustedhost |
true/false |
代理主机是否可信(仅适用于 conntype=SSL) |
true |
certdbpath |
字符串 |
包含 NSS 证书和密钥数据库文件的目录的完整路径 |
未设置 |
clientid |
字符串 |
仅对 JMS 持久订阅是必需的 |
未设置 |
reconnects |
整数 |
重新连接到代理的尝试次数(0 表示不重新连接) |
0 |
要编写使用分布式事务的应用程序,请创建一个在事务管理器环境中运行的服务器端服务,以及调用事务管理器 API 的客户端代码。Message Queue 4.2 提供了一些基于 Tuxedo 事务管理器的编程示例。这些示例位于每个平台 ./C/tuxedo 目录下的样例程序目录中。
此目录包含一个 README 文件,它说明了如何设置 Tuxedo 以使用 Message Queue 资源管理器,以及如何在 Tuxedo 环境中生成以下样例程序:
样例程序 |
描述 |
---|---|
jmsserver.c |
实现 Tuxedo 服务以通过 Message Queue 发送和接收消息。 |
jmsclient_sender.c |
使用 jmsserver.c 程序中的消息生成服务的 Tuxedo 客户端。 |
jmsclient_receiver.c |
使用 jmsserver.c 程序中的消息接收服务的 Tuxedo 客户端。 |
async_jmsserver.c |
实现 Tuxedo 服务以通过 Message Queue 异步使用消息。 |
jmsclient_async_receiver.c |
使用 async_jmsserver.c 程序中的异步消息使用服务的 Tuxedo 客户端。 |