【问题标题】:Implementing IBM MQ Listener using WMQ code (not JMS)使用 WMQ 代码(不是 JMS)实现 IBM MQ 侦听器
【发布时间】:2020-01-06 23:19:40
【问题描述】:

我很难弄清楚使用 WMQ jars/code 实现 IBM MQ 侦听器(在消息事件上)。 我见过 JMS 实现,我们有 OnMessage 方法,只要在队列中收到消息,就会执行该方法。我正在寻找使用 WMQ 罐子的类似选项。我正在浏览 MQGetMessageOptions 类和 MQC 选项,但到目前为止还没有运气。任何帮助,将不胜感激。

我正在使用 com.ibm.mq-6.0.2.1.jar jar 文件。

【问题讨论】:

  • 首先:IBM MQ 6.0 自 2012 年 9 月 30 日起(超过 7 年)就不再受到 IBM 的支持。为什么不使用更新的受支持版本。例如,该级别不支持 TLS 1.2,双向热跳动也不支持。该级别还需要多个 jar 文件。如果您使用 JMS API,最新支持的版本只需要一个 IBM MQ jar (com.ibm.mq.allclient.jar) 以及 1 到 3 个其他 Oracle jar。
  • IBM MQ 服务器在 8.0 上运行,将在 4 月之前迁移到 9.0。我提到的jar只是客户端jar
  • 对,我提到的所有内容都与客户端 jar 有关。你的另一个问题是它会起作用吗?正如莫拉格的回答中所述,它只支持该级别存在的功能。 v6.0 和 v9.1 之间在功能和安全性方面有很多改进。如果您正在开发一个新应用程序,那么使用旧版本 (6.0) 将是不可想象的。
  • 谢谢@JoshMc。了解用于 Java 的 IBM MQ 类没有侦听队列的功能。 (直到 8.0)和推荐的方法是使用 IBM MQ 类的 JMS。感谢您的澄清。那么结论是不能用 WMQ 代码实现这个功能?
  • 用于 Java 的 IBM MQ 类即使在 v8.0 或更高版本中也不支持它,除非 IBM 对上述稳定公告有所改变,否则永远不会支持。

标签: java ibm-mq


【解决方案1】:

总结

自 IBM MQ v7.0 起,用于 JMS 的 IBM MQ 类使用底层 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 中提供的水平。由于用于 Java 的 IBM MQ 类在 IBM MQ v8.0 中没有此功能,因此除非它们改变方向,否则 IBM 不会添加它。

IBM 稳定某个功能后的下一步是弃用该功能。不建议使用适用于 Java 的 IBM MQ 类开发新应用程序,最好使用适用于 JMS 的 IBM MQ 类。


替代方案

如果您确实需要使用 IBM MQ Java 类,则需要轮询队列以查找消息,而不是向 MQ 注册回调。请注意,由于在 MQ v7.0 之前不存在回调,因此在 MQ v6.0 及更低版本中用于 JMS 异步消息侦听器的 IBM MQ 类是通过在后台轮询队列来实现的。 IBM 一直通过等待来支持 GET。执行一个简单的循环,在等待 X 时间的情况下执行 get,只需要在等待超时或新消息到达队列时联系队列管理器。

如果您在没有等待的情况下执行 GET,然后立即在没有等待的情况下执行另一个 GET,那么这既昂贵又不推荐使用。

用于 JMS 异步消息侦听器的 IBM MQ 类的好处在于 IBM 已经完成了艰苦的工作,您只需要编写代码来处理消息,而不是获取消息的逻辑。在我看来,将 IBM MQ 类用于 JMS 异步消息侦听器仍然是一种比正确编写的轮询应用程序更好的方法,因为如果不出意外,您就不会重新发明轮子。


其他 API

当然还有其他支持回调的非 Java API。

  • 在 C# 中也有类似的情况,原来的 MQ.NET API (amqmdnet.dll) 不支持回调,但是较新的 XMS.NET API(.NET 中类似 JMS 的实现)支持回调。
  • 普通的 C API 支持回调,但 C++ 不支持。任何使用 C API 库的东西如果公开了该功能,在技术上就可以支持回调,但有些东西不支持,例如 pymqi 基于 C API 库但不支持回调。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2010-12-04
    • 2015-04-22
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多