编写和编译集群工作负载出口

编写集群工作负载出口程序来定制集群的工作负载管理。 在路由消息时,您可能会考虑在一天的不同时间使用通道或消息内容的成本。 但这些不是标准工作负载管理算法考虑的因素。

在大多数情况下,工作负载管理算法足以满足您的需求。 但是,为了提供您自己的用户出口程序来定制工作负载管理, IBM® MQ 包含用户出口,即集群工作负载出口。

您可能有一些可用于影响工作负载平衡的网络或消息的相关特定信息。 您可能知道哪些是大容量通道或廉价的网络路由,也可能需要根据其内容来路由消息。 您可以决定编写集群工作负载出口程序,或使用第三方提供的程序。

在访问集群队列时,将调用集群工作负载出口。 它由 MQOPENMQPUT1MQPUT 调用。

如果指定了 MQOO_BIND_ON_OPEN ,那么在 MQOPEN 时选择的目标队列管理器是固定的。 在这种情况下,出口只运行一次。

如果目标队列管理器在 MQOPEN 时不是固定的,那么会在 MQPUT 调用时选中目标队列管理器。 如果目标队列管理器不可用,或者当消息仍在传输队列上时发生故障,那么会再次调用该出口。 选择新的目标队列管理器。 如果在传输消息时消息通道发生故障,并且消息已回退,那么会选择新的目标队列管理器。

[UNIX、Linux、Windows、IBM i]On 多平台, the queue manager loads the new cluster workload exit the next time the queue manager is started.

如果队列管理器定义不包含集群工作负载出口程序名称,那么不会调用集群工作负载出口。

将各种数据传递到出口参数结构 MQWXP 中的集群工作负载出口:
  • 消息定义结构 MQMD
  • 消息长度参数。
  • 消息的副本或消息的一部分。

在非z/OS® 平台上,如果使用 CLWLMode=FAST,那么每个操作系统进程都会装入其自己的出口副本。 与队列管理器的不同连接可能会导致调用不同的出口副本。 如果出口在缺省安全模式 CLWLMode=SAFE 下运行,那么出口的单个副本会在其独立进程中运行。

编写集群工作负载出口

[z/OS]For information about writing cluster workload exits for z/OS, see 集群工作量退出编程IBM MQ for z/OS.

IBM MQ 9.1.0开始,集群工作负载出口在通道启动程序地址空间中运行,而不是在队列管理器地址空间中运行。 如果您具有集群工作负载出口,应从队列管理器启动式任务过程中移除 CSQXLIB DD 语句,并将包含集群工作负载出口的数据集添加到通道启动程序启动式任务过程上的 CSQXLIB 并置中。

[UNIX、Linux、Windows、IBM i]对于 Multiplatforms,集群工作负载出口不得使用 MQI 调用。 在其他方面,编写和编译集群工作负载出口程序的规则类似于通道出口程序所适用的规则。 请按照 "在AIX、Linux 和 Windows 上编写退出和可安装服务"中的步骤操作,并使用示例程序 "示例集群工作负载退出"来帮助编写和编译退出。

有关通道退出的更多信息,请参阅编写通道退出程序

配置集群工作负载出口

通过在 ALTER QMGR 命令中指定集群工作负载出口属性,可以在队列管理器定义中对集群工作负载出口进行命名。 例如:
ALTER QMGR CLWLEXIT(myexit)