使用 WMQ 代码(而非 JMS)实现 IBM MQ Listener
Implementing IBM MQ Listener using WMQ code (not JMS)
我很难弄清楚如何使用 WMQ jars/code 实现 IBM MQ 侦听器(在消息事件上)。
我见过 JMS 实现,其中我们有 OnMessage 方法,只要在队列中收到消息,该方法就会执行。我正在寻找使用 WMQ Jars 的类似选项。我正在浏览 MQGetMessageOptions class 和 MQC 选项,但到目前为止运气不好。任何帮助,将不胜感激。
我正在使用 com.ibm.mq-6.0.2.1.jar jar 文件。
总结:
IBM MQ 类 for JMS 使用自 IBM MQ v7.0 以来的底层 IBM MQ 回调功能实现异步消息侦听器功能 (onMessage)。
Java 的 IBM MQ 类 根本不支持异步消息侦听器功能(回调)。
背景
回调功能已添加到 IBM MQ v7.0,但 IBM 未在 IBM MQ 类 中为 Java 实现此功能。
请注意,根据 v9.0 知识中心页面“Using IBM MQ classes for Java”,用于 Java 的 IBM MQ 类 在功能上已稳定在 IBM MQ 版本 8.0 中的水平.由于 IBM MQ 类 for Java 从 IBM MQ v8.0 开始没有此功能,除非他们改变方向,否则 IBM 不会添加它。
IBM 稳定功能后的下一步是弃用该功能。不建议使用 IBM MQ 类 for Java 开发新应用程序,最好使用 IBM MQ 类 for JMS。
备选
如果您确实需要为 Java 使用 IBM MQ 类,则需要轮询队列以查找消息,而不是向 MQ 注册回调。请注意,由于回调在 MQ v7.0 之前不存在,IBM MQ 类 for JMS 异步消息侦听器在 MQ v6.0 和更低版本中是通过在后台轮询队列来实现的。 IBM 一直支持等待 GET。做一个等待 X 时间量的简单循环,只需要在等待超时或新消息到达队列时经常联系队列管理器。
如果您在不等待的情况下执行 GET,然后在不等待的情况下立即执行另一个 GET,那么这既昂贵又不推荐解决方案。
IBM MQ 类 for JMS 异步消息侦听器的好处是 IBM 已经完成了艰苦的工作,您只需要编写代码来处理消息,而不需要编写获取消息的逻辑信息。在我看来,将 IBM MQ 类 用于 JMS 异步消息侦听器仍然是一种比正确编写的轮询应用程序更好的方法,因为如果没有别的,你就不会重新发明轮子。
其他APIs
当然还有其他非Java API支持回调。
- 在C#中也有类似的情况,原来的MQ.NETAPI(
amqmdnet.dll
)不支持回调,但是更新的XMS.NETAPI(.NET 中类似 JMS 的实现)确实支持回调。
- 普通CAPI支持回调,C++不支持。任何使用 C API 库的东西都可以在技术上支持回调,如果它们公开该功能,但有些东西不支持,例如 pymqi 基于 C API 库但不支持回调。
我很难弄清楚如何使用 WMQ jars/code 实现 IBM MQ 侦听器(在消息事件上)。 我见过 JMS 实现,其中我们有 OnMessage 方法,只要在队列中收到消息,该方法就会执行。我正在寻找使用 WMQ Jars 的类似选项。我正在浏览 MQGetMessageOptions class 和 MQC 选项,但到目前为止运气不好。任何帮助,将不胜感激。
我正在使用 com.ibm.mq-6.0.2.1.jar jar 文件。
总结:
IBM MQ 类 for JMS 使用自 IBM MQ v7.0 以来的底层 IBM MQ 回调功能实现异步消息侦听器功能 (onMessage)。
Java 的 IBM MQ 类 根本不支持异步消息侦听器功能(回调)。
背景
回调功能已添加到 IBM MQ v7.0,但 IBM 未在 IBM MQ 类 中为 Java 实现此功能。
请注意,根据 v9.0 知识中心页面“Using IBM MQ classes for Java”,用于 Java 的 IBM MQ 类 在功能上已稳定在 IBM MQ 版本 8.0 中的水平.由于 IBM MQ 类 for Java 从 IBM MQ v8.0 开始没有此功能,除非他们改变方向,否则 IBM 不会添加它。
IBM 稳定功能后的下一步是弃用该功能。不建议使用 IBM MQ 类 for Java 开发新应用程序,最好使用 IBM MQ 类 for JMS。
备选
如果您确实需要为 Java 使用 IBM MQ 类,则需要轮询队列以查找消息,而不是向 MQ 注册回调。请注意,由于回调在 MQ v7.0 之前不存在,IBM MQ 类 for JMS 异步消息侦听器在 MQ v6.0 和更低版本中是通过在后台轮询队列来实现的。 IBM 一直支持等待 GET。做一个等待 X 时间量的简单循环,只需要在等待超时或新消息到达队列时经常联系队列管理器。
如果您在不等待的情况下执行 GET,然后在不等待的情况下立即执行另一个 GET,那么这既昂贵又不推荐解决方案。
IBM MQ 类 for JMS 异步消息侦听器的好处是 IBM 已经完成了艰苦的工作,您只需要编写代码来处理消息,而不需要编写获取消息的逻辑信息。在我看来,将 IBM MQ 类 用于 JMS 异步消息侦听器仍然是一种比正确编写的轮询应用程序更好的方法,因为如果没有别的,你就不会重新发明轮子。
其他APIs
当然还有其他非Java API支持回调。
- 在C#中也有类似的情况,原来的MQ.NETAPI(
amqmdnet.dll
)不支持回调,但是更新的XMS.NETAPI(.NET 中类似 JMS 的实现)确实支持回调。 - 普通CAPI支持回调,C++不支持。任何使用 C API 库的东西都可以在技术上支持回调,如果它们公开该功能,但有些东西不支持,例如 pymqi 基于 C API 库但不支持回调。