“高可用性”样本程序
amqsghac、amqsphac 和 amqsmhac 高可用性样本程序使用客户机自动重新连接来说明在发生队列管理器故障后的恢复过程。 amqsfhac 将检查使用联网存储器的队列管理器在发生故障后是否维护数据完整性。
amqsghac、amqsphac 和 amqsmhac 程序都通过命令行来启动,并且可组合使用以说明在多实例队列管理器的一个实例发生故障后的重新连接过程。
也可以使用 amqsghac、amqsphac 和 amqsmhac 样本来说明客户机重新连接到单实例队列管理器(通常配置为队列管理器组)的过程。
为了使示例保持简单,因此易于配置,将显示样本程序重新连接到已启动,已停止,然后再次重新启动的单个实例队列管理器; 请参阅 设置并控制队列管理器。
同时使用 amqsfhac 和 amqmfsck 以检查文件系统完整性。 请参阅 amqmfsck (文件系统检查) 和 验证共享文件系统行为 以获取更多信息。
- amqsphac queueName [ qMgrName ]
- amqsphac 是 IBM® MQ MQI client 应用程序。 它将消息序列放入队列中(各条消息之间存在两秒延迟),并显示已发送到相应事件处理程序的事件。
- 在未使用同步点的情况下将消息放入队列中。
- 可重新连接到同一队列管理器组中的任何队列管理器。
- amqsghac queueName [ qMgrName ]
- amqsghac 是 IBM MQ MQI client 应用程序。 它从队列中获取消息,并显示已发送到相应事件处理程序的事件。
- 在未使用同步点的情况下从队列中获取消息。
- 可重新连接到同一队列管理器组中的任何队列管理器。
- amqsmhac -s sourceQueueName -t targetQueueName [ -m qMgrName ] [ -w waitInterval ]
- amqsmhac 是 IBM MQ MQI client 应用程序。 它将消息从一个队列复制到另一个队列中,在程序完成前收到最后一条消息后的缺省等待时间间隔为 15 分钟。
- 在同步点内复制这些消息。
- 只能重新连接到相同的队列管理器。
- amqsfhac QueueManagerName QueueName SideQueueName InTransactionCount RepeatCount ( 0 | 1 | 2 )
- amqsfhac 是 IBM MQ MQI client 应用程序。 它检查使用联网存储器 (例如 NAS 或集群文件系统) 的 IBM MQ 多实例队列管理器是否维护数据完整性。 遵循 验证共享文件系统行为中运行 amqsfhac 的步骤。
- It uses the mqcno_reconnect_q_mgr option when connecting to QueueManagerName. 在队列管理器执行故障转移时,它会自动重新连接。
- 在使队列管理器执行任意次数的故障转移期间,它将 InTransactionCount * RepeatCount 持久消息放入 QueueName 中。 amqsfhac 每次都会重新连接到队列管理器,并继续运行。 此测试可确保不丢失任何消息。
- InTransactionCount 消息将放入每个事务中。 该事务将重复 RepeatCount 次。 如果某个事务中发生故障,那么 amqsfhac 将回滚并在 amqsfhac 重新连接到队列管理器时重新提交该事务。
- 它还会将消息放入 SideQueueName 中。 它使用 SideQueueName 来检查是从 QueueName 中成功落实还是回滚所有消息。 如果检测到不一致情况,那么它将返回一条错误消息。
- 通过将最后一个参数设置为 ( 0 | 1 | 2 ) ,使输出跟踪量与 amqsfhac 不同。
- 0
- 最小输出量。
- 1
- 中等输出量。
- 2
- 最大输出量。
配置客户机连接
您需要配置客户机和服务器连接通道,才能运行这些样本。 客户机验证过程将阐述如何设置客户机测试环境。 请参阅 验证客户机安装。
也可以使用以下示例中提供的配置。
有关使用 amqsghac、amqsphac 和 amqsmhac 的示例
此示例说明了使用单实例队列管理器的可重新连接的客户机。
请执行以下步骤来运行这些样本。
- 创建包含以下命令的文件 hasamples.tst:
DEFINE QLOCAL(SOURCE) REPLACE DEFINE QLOCAL(TARGET) REPLACE DEFINE CHANNEL(CHANNEL1) CHLTYPE(SVRCONN) TRPTYPE(TCP) + MCAUSER(MUSR_MQADMIN) REPLACE DEFINE CHANNEL(CHANNEL1) CHLTYPE(CLNTCONN) TRPTYPE(TCP) + CONNAME('LOCALHOST(2345)') QMNAME(QM1) REPLACE ALTER LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) TRPTYPE(TCP) + PORT(2345) START LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) START CHANNEL(CHANNEL1) - 在命令提示符处输入以下命令:
crtmqm QM1strmqm QM1runmqsc QM1 < hasamples.tst
- 将环境变量 MQCHLLIB 设置为 AMQCLCHL.TAB 客户机通道定义文件的路径;例如,
SET MQCHLLIB=C:\IBM\MQ\MQ7\Data\qmgrs\QM1\@ipcc。 - 在设置了 MQCHLLIB 的情况下打开三个新窗口; 例如,在 Windows上,在先前命令提示符处输入 start 三次,在其中一个窗口中启动每个程序。 请参阅 设置和控制队列管理器中的步骤 5 。)
- 输入命令
endmqm -r -p QM1以停止该队列管理器,然后允许客户机重新连接。 - 输入命令
strmqm QM1以重新启动该队列管理器。
在 Windows 上运行 amqsghac, amqsphac和 amqsmhac 样本的结果显示在以下示例中。
设置和控制队列管理器
创建队列管理器。
C:\> crtmqm QM1 IBM MQ queue manager created. Directory 'C:\IBM\MQ\MQ7\Data\qmgrs\QM1' created. Creating or replacing default objects for QM1. Default objects statistics : 67 created. 0 replaced. 0 failed. Completing setup. Setup completed.请记住稍后要设置 MQCHLLIB 变量的数据目录。
启动队列管理器。
C:\> strmqm QM1 IBM MQ queue manager 'QM1' starting. 5 log records accessed on queue manager 'QM1' during the log replay phase. Log replay for queue manager 'QM1' complete. Transaction manager state recovered for queue manager 'QM1'. IBM MQ queue manager 'QM1' started.- 创建队列和通道,修改侦听器端口,然后启动侦听器和通道。
C:\> runmqsc QM1 < hasamples.tst 5724-H72 (C) Copyright IBM Corp. 1994, 2025. ALL RIGHTS RESERVED. Starting MQSC for queue manager QM1. 1 : DEFINE QLOCAL(SOURCE) REPLACE AMQ8006: IBM MQ queue created. 2 : DEFINE QLOCAL(TARGET) REPLACE AMQ8006: IBM MQ queue created. 3 : DEFINE CHANNEL(CHANNEL1) CHLTYPE(SVRCONN) TRPTYPE(TCP) MCAUSER(MUSR_MQADMIN) REPLACE AMQ8014: IBM MQ channel created. 4 : DEFINE CHANNEL(CHANNEL1) CHLTYPE(CLNTCONN) TRPTYPE(TCP) CONNAME('LOCALHOST(2345)') QMNAME(QM1) REPLACE AMQ8014: IBM MQ channel created. 5 : ALTER LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) TRPTYPE(TCP) PORT(2345) AMQ8623: IBM MQ listener changed. 6 : START LISTENER(SYSTEM.DEFAULT.LISTENER.TCP) AMQ8021: Request to start IBM MQ Listener accepted. 7 : START CHANNEL(CHANNEL1) AMQ8018: Start IBM MQ channel accepted. 7 MQSC commands read. No commands have a syntax error. All valid MQSC commands were processed. - 向客户机公开客户机通道表。
使用从步骤 1中的 crtmqm 命令返回的数据目录,并将目录 @ipcc 添加到该目录以设置 MQCHLLIB 变量。
C:\> SET MQCHLLIB=C:\IBM\MQ\MQ7\Data\qmgrs\QM1\@ipcc - 在其他窗口中启动样本程序
C:\> start amqsphac SOURCE QM1 C:\> start amqsmhac -s SOURCE -t TARGET -m QM1 C:\> start amqsghac TARGET QM1 终止队列管理器并重新启动。
C:\> endmqm -r -p QM1 Waiting for queue manager 'QM1' to end. IBM MQ queue manager 'QM1' ending. IBM MQ queue manager 'QM1' ended. C:\> strmqm QM1 IBM MQ queue manager 'QM1' starting. 5 log records accessed on queue manager 'QM1' during the log replay phase. Log replay for queue manager 'QM1' complete. Transaction manager state recovered for queue manager 'QM1'. IBM MQ queue manager 'QM1' started.
amqsphac
Sample AMQSPHAC start
target queue is SOURCE
message <Message 1>
message <Message 2>
16:25:22 : EVENT : Connection Reconnecting (Delay: 0ms)
16:25:45 : EVENT : Connection Reconnecting (Delay: 0ms)
16:26:02 : EVENT : Connection Reconnectedmessage
<Message 3>
message <Message 4>
message <Message 5>
amqsmhac
Sample AMQSMHA0 start
16:25:22 : EVENT : Connection Reconnecting (Delay: 0ms)
16:25:45 : EVENT : Connection Reconnecting (Delay: 0ms)
16:26:02 : EVENT : Connection Reconnected
No more messages.
Sample AMQSMHA0 end
C:\>
amqsghac
Sample AMQSGHAC start
message <Message 1>
message <Message 2>
16:25:22 : EVENT : Connection Reconnecting (Delay: 0ms)
16:25:45 : EVENT : Connection Reconnecting (Delay: 0ms)
16:26:02 : EVENT : Connection Reconnected
message <Message 3>
message <Message 4>
message <Message 5>
