在JMS / MQ升级大小写问题之后,使用JMSCorrelationID接收消息不起作用

时间:2018-08-22 16:19:35

标签: java jms ibm-mq

上下文

我们在Java / Spring应用程序和Mainframe应用程序之间有非常特定的基于IBM MQ系列的通信。我将所有这些信息(例如如何在IMS Bridge中释放MQMD)抽象为一个与JMS / MQ有关的问题。

在使用JMS规范1.x和IBM MQ 7.5x时,我们可以完美地建立关联 JMSCorrelationID的字符串形式类似于ID:F5F5F0F1F5F1404040404040404040404040404040404040,在ID:部分之后是IBM 500(ebcdic)编码的HEX字符串。

升级

在Java的系统方面,我们进行了升级:

  • JMS规范1.x到2.0
  • IBM MQ 7.5.x驱动程序到9.0.2.0
  • 新队列管理器支持IBM MQ 9.0.2.0

在大型机方面,我们没有进行任何更改。现在,由于此升级,只要String的表示形式为大写,就不会收到消息。

问题摘要

我们遇到的问题与IT19225: MQ-JMS QUEUEBROWSER USING A SELECTOR WITH AN UPPERCASE JMSCORRELATIONID DOES NOT FIND MESSAGES中描述的完全相同,唯一的问题是我们在IBM MQ 9.0.2.0上解决了上述问题。

**示例** 因此,当尝试接收看起来像JMSCorrelationID的{​​{1}}时(实际上不管是小写还是大写表示形式),都会发生以下情况:

当字符串表示形式为小写时(收到ID:F5F5F0F1F5F1404040404040404040404040404040404040时,不会收到带有MQ CorrelId作为大写字符串表示形式的消息。

我尝试过的事情:

  • 接收时将ID:f5f5f0f1f5f1404040404040404040404040404040404040"更改为小写
  • 接收时将JMSCorrelationID更改为大写
  • 将消息手动输入到队列中,结果是
小写的

JMSCorrelationID会收到,大写的MQ CorrelId不会收到。

  • 当前试图绕过整个“ JMS / MQ Driver”魔术,并以某种方式将相关性id作为字节数组注入到MQ端上。

任何帮助将不胜感激,因为我很震惊,我根本找不到google这样的问题(已修复的错误除外)

1 个答案:

答案 0 :(得分:0)

简短答案:如果APAR描述适合您所需要的问题,则需要升级到MQ v9.0.3 CD,有关更多详细信息,请参见下面的我的较长更新。


关于IBM MQ版本号的一些说明:

在MQ v9.0和更高版本中,IBM将发行版分为两个流。长期支持(LTS)和连续交付(CD)。 LTS版本将具有第四个数字更改的版本,例如9.0.0.2,而CD版本将具有第三个数字更改的版本,例如9.0.2。

IBM将在MQ的主要版本(例如9.0)的整个生命周期内为LTS版本提供缺陷支持,对于v9.0 CD,IBM最初stated个缺陷修复和安全更新仅适用于这两个版本,最新的CD更新。最终的9.0 CD版本是9.0.5,因此它们只支持9.0.4和9.0.5。但是随着9.1 CD的发布,他们更新了此支持声明(retroactively for 9.0,指出“对CD发行版的缺陷支持自发行之日起12个月内可用,或者仍是最新的两张CD之一。版本9.0.2已于2017年3月17日发布,并且不是最近的CD版本不再符合IBM缺陷支持的两个条件之一。9.0.3已于2017年5月30日发布。同样,因此在这一点上,在原始支持声明或新支持声明下,直到v9.0支持结束为止,IBM将支持的CD发行版分别为9.0.4和9.0.5。发行了v9.0 CD。


在您的问题中,您说您使用的是v9.0.2(CD),而不是9.0.0.2(LTS)。您提到的APAR指出它已在9.0.0.2 LTS中修复。尽管APAR页面没有提到它已被固定在CD版本中,但自9.0.0.2是2017年10月5日发行以来,这很奇怪,我注意到9.0.4 CD已于2017年11月6日发行,而9.0.5 CD已于3月16日发行2018年。我过去曾指出,IBM在每个已发布的APAR上列出的计划发行日期以及与每个发行版的修订列表进行比较时通常都不准确。我查看了9.0 CD fixlist页面,可以看到它指出APAR IT19225已在9.0.3 CD中修复。

由于这是一个客户端问题,因此没有理由无法更新到最新的9.0.5 jar文件来获得此修复程序,尽管您应该通知MQ支持团队,他们正在使用不支持的版本。队列管理器。您可以从MQ v9.0客户端下载页面MQC9: IBM MQ V9 Clients下载Java-ALL自解压jar文件。请注意,由于它们不再受支持,它们甚至没有列出要下载的9.0.3及更早版本。


我的个人推荐:

如果您要使用v9.0,则最好至少在客户端上使用9.0 LTS版本(当前版本为9.0.0.4,也可以从上面的客户端下载链接获得)。

我的原因:

  • 选择CD发行流的主要原因是要利用IBM在这些发行版中添加的新功能。
  • 该CD每隔几个月发布一次,但最终在大约2年后,IBM将所有新CD功能推入了新的LTS版本。这发生在2018年7月23日发布v9.1时,将不再有v9.0 CD发行版,因为这些发行版将针对最新版本9.1完成,ex 9.1.1会在某些时候推出新功能。 / li>
  • 9.0.5是最新的v9.0 CD版本。
  • vli v9.0是由IBM在2016年6月2日发布的,IBM声明至少要在五年后才宣布终止支持,但他们通常对此略有保留。 v8.0于2014年6月13日发布,EOS是2020年4月30日。v7.1 / v7.5 / v8.0的EOS日期均为4月30日,因此,按照最近的模式,我猜测9.0将在4月停止支持。 2022年30月。
  • 我不记得在任何9.0 CD发行版中都宣布了对JMS的IBM MQ类的任何重大增强,因此您不会失去向LTS发行版的任何功能(可以通过知识中心中的列表仔细检查:What's new and changed in Version 9.0.x Continuous Delivery
  • 您将获得更好的支持,因为9.0 LTS版本已发布,其中已修复已识别的缺陷(APARS),直到EOS。
  • 如果您使用9.0.5,如果发现任何其他缺陷,则需要前往IBM申请IFIX才能适用于9.0.5,这也仅适用于与IBM签订了支持合同的公司(不确定您的情况,但我看到有些情况下有人支持连接到另一家公司的队列管理器的客户端应用程序,因此他们实际上与IBM没有支持关系。
  • 在队列管理器端,如果您不使用添加到9.0.1或9.0.2的任何新队列管理器功能,则建议您做同样的事情。