IBM MQ 应用程序的设计注意事项
当您决定应用程序如何利用可供您使用的平台和环境时,需要决定如何使用 IBM® MQ提供的功能。
注意: ![[不推荐]](ngdeprecated.gif)
![[MQ 9.3.0 2022 年 6 月]](ng930cd.gif)
从 IBM MQ 9.3.0开始,32 位 IBM MQ 应用程序库在网络和本地绑定连接方面已不再适用于所有平台。 在 IBM MQ 9.3.0 LTS 生命周期内支持 32 位应用程序,但可能会在未来的 CD 或 LTS 版本中删除。 32 位应用程序应重新编译为 64 位,以确保 IBM MQ 应用程序可迁移到未来的 IBM MQ 应用程序库。
![[不推荐]](ngdeprecated.gif)
![[MQ 9.3.0 2022 年 6 月]](ng930cd.gif)
从 IBM MQ 9.3.0开始,32 位 IBM MQ 应用程序库在网络和本地绑定连接方面已不再适用于所有平台。 在 IBM MQ 9.3.0 LTS 生命周期内支持 32 位应用程序,但可能会在未来的 CD 或 LTS 版本中删除。 32 位应用程序应重新编译为 64 位,以确保 IBM MQ 应用程序可迁移到未来的 IBM MQ 应用程序库。设计 IBM MQ 应用程序时,请考虑以下问题和选项:
- 应用程序类型
- 应用程序的用途是什么? 有关您可以开发的不同类型应用程序的信息,请参阅相关链接:
- 服务器
- 客户机
- 发布/预订
- Web Service
- 用户出口、API 出口和可安装服务
此外,您还可以编写自己的应用程序以自动管理 IBM MQ。 有关更多信息,请参阅 IBM MQ 管理接口 (MQAI) 和 自动化管理任务。
- 编程语言
- IBM MQ 支持多种不同的编程语言用于编写应用程序。 有关详细信息,请参阅 为 IBM MQ 开发应用程序。
- 用于多个平台的应用程序
您的应用程序是否将在多个平台上运行? 您是否具有从如今使用的平台移至其他平台的策略? 如果其中任一问题的回答为是,请确保对您的程序进行编码以实现平台独立性。
例如,如果使用的是 C,那么将使用 ANSI 标准 C 来编码。 使用标准 C 库函数(而不是特定于平台的同等函数),即使特定于平台的函数更快或更高效也是如此。 例外情况是在代码中的效率至关重要时,应使用 #ifdef 对两种情况均进行编码。 例如:#ifdef _AIX AIX specific code #else generic code #endif- 队列类型
- 您想要每次需要队列时都创建队列,还是想要使用已设置的队列? 您想要在完成使用队列时将其删除,还是将要再次使用该队列? 您是否想要使用别名队列以实现应用程序独立性? 要查看支持的队列类型,请参阅队列。
使用共享队列、队列共享组和队列共享组群集(仅 IBM MQ for z/OS®)- 您可能想要利用在将共享队列与队列共享组结合使用时提高的可用性、可扩展性和工作负载均衡。 有关更多信息,请参阅共享队列和队列共享组 。
您可能还想要估算平均和峰值消息流,并且考虑使用队列共享组集群来分布工作负载。 有关更多信息,请参阅共享队列和队列共享组 。
- 使用队列管理器集群
- 您可能想要利用简化的系统管理,以及在使用集群时提高的可用性、可扩展性和工作负载均衡。
- 消息类型
- 您可能想要对简单消息使用数据报,但是对其他情况使用请求消息(对于此类消息您期望获取回复)。 您可能想要向某些消息分配不同的优先级。 有关设计报文的更多信息,请参阅 报文设计技巧。
- 使用发布/预订或点到点消息传递
- 通过使用发布/预订消息传递,发送应用程序将其希望在 IBM MQ 消息中共享的信息发送到由 IBM MQ publish? subscribe 管理的标准目标,并让 IBM MQ 处理该信息的分发。 目标应用程序不必了解有关其接收的信息源的任何信息,它只是表明对一个或多个主题的兴趣并在信息可用时接收该信息。 有关发布/预订消息传递的更多信息,请参阅发布/预订消息传递。
- 控制 IBM MQ 程序
- 您可能希望自动启动某些程序,或让程序等待特定消息到达队列(使用 IBM MQ 触发功能,请参阅 使用触发器启动 IBM MQ 应用程序)。 或者,当队列上的消息处理速度不够快 (使用 检测事件 中描述的 IBM MQ 检测事件 功能) 时,您可能想要启动应用程序的另一个实例。
- 在 IBM MQ 客户机上运行应用程序
- 客户机环境中支持完整 MQI ,几乎所有以过程语言编写的 IBM MQ 应用程序都可以重新链接以在 IBM MQ MQI client上运行。 将 IBM MQ MQI client 上的应用程序链接到 MQIC 库,而不是 MQI 库。 不支持
Get(signal) on z/OS 。 注: 在 IBM MQ 客户机上运行的应用程序可以同时连接到多个队列管理器,或者在 MQCONN 或 MQCONNX 调用上使用带有星号 (*) 的队列管理器名称。 由于此函数将不可用,因此如果要链接到队列管理器库而不是客户机库,请更改应用程序。有关详细信息,请参阅 在 IBM MQ MQI 客户端环境中运行应用程序。
- 应用程序性能
- 设计决策会影响应用程序的性能,有关提高 IBM MQ 应用程序性能的建议,请参阅 应用程序设计和性能注意事项
和 IBM i 应用程序的设计和性能注意事项 。 - 高级 IBM MQ 方法
- 对于更高级的应用程序,您可能希望使用一些高级 IBM MQ 方法,例如关联应答以及生成和发送 IBM MQ 上下文信息。 有关详细信息,请参阅 高级应用的设计技术。
- 保护数据并维护其完整性
- 您可以使用随消息传递的上下文信息来测试是否已从可接受的源发送消息。 您可以使用 IBM MQ 或操作系统提供的同步点设施,确保您的数据与其他资源保持一致(有关详细信息,请参阅 提交和备份工作单元)。 您可以使用 IBM MQ 消息的 持久性 功能来确保重要消息的传递。
- 测试 IBM MQ 应用程序
IBM MQ 程序的应用程序开发环境与任何其他应用程序的应用程序开发环境不同,因此您可以使用相同的开发工具以及 IBM MQ 跟踪工具。
使用 IBM MQ for z/OS 测试 CICS® 应用程序时,可以使用 CICS 执行诊断工具 (CEDF)。 CEDF 会捕获每个 MQI 调用的入口和出口以及对所有 CICS 服务的调用。 此外,在 CICS 环境中,您可以编写 API 交叉出口程序,以在每次 MQI 调用之前和之后提供诊断信息。 有关如何执行此操作的信息,请参阅 在 IBM MQ for z/OS 上使用和编写应用程序。
测试 IBM i 应用程序时,可以使用标准调试器。 要启动此调试器,请使用 STRDBG 命令。- 处理异常和错误
- 您需要考虑如何处理无法传送的消息,以及如何解决队列管理器向您报告的错误情况。 对于某些报告,必须在 MQPUT 上设置报告选项。