无法使用 JMS 应用程序从 IBM MQ 获取响应

2024-04-20

我们使用 IBM MQ 以请求/回复方式与第三方进行通信。我们向他们发送请求,他们给我们答复。 目前,我们都有一个简单的基于 Java 的本机 IBM MQ 应用程序。 我们计划使用 spring jms 重写我们的代码。 但是当使用 spring jms 时,我们在给定时间内没有得到任何响应。我们使用 JMSTemplate 来发送或接收消息。 我正在分享我的代码片段。我在这里做错了什么吗?我还应该在这里设置其他属性吗?

  // Request Part (we are sending request)

  String request // this is the request string
  byte[] reqData = request.getBytes(); // converting it into byte array to send

  TextMessage txtMsg = session.createTextMessage(String.valueOf(reqData));

  Destination replyToQName = jmsTemplate.getDestinationResolver().resolveDestinationName(session, responseQueueName, false);

  txtMsg.setJMSReplyTo(replyToQName);

  Destination requestQ = jmsTemplate.getDestinationResolver().resolveDestinationName(session, requestQueueName, false);

  ((JmsDestination) requestQ).setBooleanProperty( WMQConstants.WMQ_MQMD_WRITE_ENABLED, true );

  ((MQQueue) requestQ).setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ); // setting this because third party application is native websphere mq java application 

  jmsTemplate.convertAndSend(requestQ, txtMsg);

  // saved msgId of request for late use
  String messageId =  txtMsg.getJMSMessageID();


  // Response fetching part

  Destination responseQ = jmsTemplate.getDestinationResolver().resolveDestinationName(session, responseQueueName, false);

  ((JmsDestination) responseQ).setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED, true);

  ((JmsDestination) responseQ).setObjectProperty( WMQConstants.JMS_IBM_MQMD_CORRELID, msgIdText);

  jmsTemplate.setReceiveTimeout(30000L);

  String filter = "JMSCorrelationID='" + messageId + "'"; // to match request message's messageId with response message's correlationId

  TextMessage respMsg = (TextMessage) jmsTemplate.receiveSelected(responseQ, filter);

下面是我的连接工厂代码:

 MQConnectionFactory factory = new MQQueueConnectionFactory();
 factory.setHostName("hostname");
 factory.setPort(1420);
 factory.setQueueManager("QM1");
 factory.setChannel("TEST.CHANNEL");
 factory.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);

这里的主要问题是尚未执行基本诊断,或者如果进行了基本诊断,则问题中未提供结果。我不了解 Spring,但我知道基本的 MQ 调试。我还住在密苏里州,这个“向我展示”的州,足够长的时间将这句州训作为我自己的座右铭。告诉我如何验证所有假设。作为 MQ 管理员,我将与开发人员合作,通过目视检查确认所有假设。我的处理方法如下:

检查出站消息

  1. 停止出站通道
  2. PUT 请求消息
  3. 获取(启用)XMitQ 并浏览消息
    a) 是否出现该消息?
    b) 消息的格式和值是否正确?
    c) 回复字段是否正确填写?
    d) 消息是否过期,如果过期,过期时间是否足够长?

检查返回消息

  1. 停止应用程序
  2. 重启出站通道
  3. 浏览回复队列
    a) 有消息到达吗?
    b) 格式和填充是否正确?

Summary
最后,只有两种可能出现问题的情况,而且都很容易检查。

首先,新程序可能根本没有发出任何消息。在重构代码以使用新框架时,这实际上很常见。在没有积极验证消息被 PUT 的情况下尝试调试(并在问题中明确说明这是如何完成的以及结果)是一个非常大的假设。不要假设。验证消息是否已生成,并在询问时告诉我们详细信息,以便我们可以消除这一根本原因。

其次,从接受请求的应用程序开始向后工作,它并不关心哪个应用程序发送消息(如果它们相同)。假设请求者应用程序实际上正在 PUT 一条消息,它不能与旧消息相同,因为它从远程服务器应用程序得到不同的反应。比较新旧应用程序版本中同一事务的消息。以十六进制打印它们,并在必要时逐字节进行比较。

进行这种鉴别诊断后,就有可能缩小焦点并找出根本原因。如果没有生成消息则检查的项目列表与检查是否实际生成消息的项目列表有很大不同。也许可以在不进行基本诊断的情况下解决此问题,但这是例外。所以我的非答案答案是:从进行基本诊断开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 JMS 应用程序从 IBM MQ 获取响应 的相关文章

  • 如何创建一个在给定范围内随机打乱数字的 int 数组[重复]

    这个问题在这里已经有答案了 基本上 假设我有一个可以容纳 10 个数字的 int 数组 这意味着我可以在每个索引中存储 0 9 每个数字只能存储一次 如果我运行下面的代码 int num new int 10 for int i 0 i l
  • 如何使用 Talend Open Studio Data Integration 创建属性文件?

    我曾经使用 Talend Open Integration studio 创建作业并从 IDE 运行它或将其导出为可执行 jar 文件 但我并没有广泛使用它 是否可以创建一个包含不同服务器名称和其他变量的外部配置文件 以便在创建 Talen
  • Java:无法从未命名的模块读取包?

    在将项目转移到 Gradle 时 我停止使用 org json 的自定义构建 该构建安装了 module info java 以符合模块系统 现在 我通常通过 Maven 使用它 并且由于 org json 默认情况下不是一个模块 因此它被
  • System.out 什么时候不会出现在 Java 控制台中?

    我明白任何要标准化的东西 System out 将出现在 Java 控制台窗口中 启用时 我在某个地方发现 在某些情况下可能无法尝试这样做 例如 在 Swing 应用程序中 是这样吗 基本上 什么情况或设置我不希望在控制台中看到标准输出 例
  • 删除最低位

    给定一个二进制数 删除最低位的最快方法是什么 01001001010 gt 01001001000 它将在代码中用于迭代变量的位 伪代码如下 while bits 0 index getIndexOfLowestOrderBit bits
  • Xstream:删除类属性

    我该如何删除类 某事 Xstream 中的属性 我使用带注释的 Xstream 我读了它的代码 发现你的类不是mapper defaultImplementationOf fieldType 它会为你添加默认的类属性 除非类属性名称为nul
  • Spring方法获取给定类型的所有bean

    我试图从一个相同类型的豆子中获取所有豆子FileSystemXmlApplicationContext 我正在使用factory getBeansOfType SomeType class 但我注意到它只返回顶级 bean 是否有任何其他方
  • 在 Android 应用程序中读取 CSV 文件

    我正在开发一个概念验证应用程序 以便我可以在我正在制作的更大的应用程序中实现该功能 我对 Java 和 Android 开发有点陌生 但希望这个问题不会太简单或太复杂 基本上 我试图从 CSV 文件中读取字符串列表 并使其可用于在应用程序的
  • 修改void函数的输入参数并随后读取它

    我有一个相当复杂的 java 函数 我想使用 jUnit 进行测试 并且我正在使用 Mockito 来实现此目的 这个函数看起来像这样 public void myFunction Object parameter doStuff conv
  • 如何使用正则表达式提取子字符串

    我有一个字符串 其中有两个单引号 特点 单引号之间是我想要的数据 如何编写正则表达式从以下文本中提取 我想要的数据 mydata some string with the data i want inside 假设您想要单引号之间的部分 请
  • 使用当前日期时间的 RecyclerView 的动态节标题

    我将使用 RecyclerView 作为节标题 我想在 SQLite 数据库中插入每个日期和时间数据时创建节标题 我按照以下链接获取了此解决方案 但没有成功 请参考下图 对于上面的图像数据 使用以下代码或部分是静态的 List
  • JJWT依赖混乱

    我继承了一个java项目 在POM xml中有这个
  • 错误:升级到 lombok 1.16.2 后包 javax.annotation 不存在

    我的 android 项目使用 lombok 1 16 0 构建得很好 但是一旦我将依赖项更改为目标 1 16 2 我在使用 lombok 注释的任何地方都会收到以下错误 Error 20 1 error package javax ann
  • SocketTimeoutException:插入 Google 云端硬盘时读取超时 - 是否可以重试?

    如同Java Google Drive SDK File insert execute 上的 SocketTimeoutException https stackoverflow com questions 17583630 java go
  • Spring:在属性文件中定义@RequestMapping值

    是否可以定义a的值 RequestMapping在 Spring 中通过在属性文件中定义注释 实际上 我做了类似的事情 Controller RequestMapping xxx public class MyController 但我想存
  • 为什么浮点数有符号零?

    为什么双打有 0也 0 其背景和意义是什么 0 通常 被视为0 当一个negative浮点数非常接近零 可以考虑0 要明确的是 我指的是算术下溢 http en wikipedia org wiki Arithmetic underflow
  • MongoDB 和 upsert 问题

    我有两个模型 1 资源假期 Id private String resourceID private List
  • 使用 Java Swing 平均成绩 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个家庭作业 我一直在编码 我以
  • Postgresql JDBC 驱动程序中的批量更新在自动提交中回滚

    我正在使用 postgres 9 3 1100 jdbc41 JDBC4 驱动程序进行批量插入 根据 JDBC 规范 其可达 到应用程序以禁用自动提交并提交或 回滚事务 就我而言 我没有使用任何事务 即自动提交为真 但如果批次中的其中一个插
  • 我可以从 LDAP 更改自己的 Active Directory 密码(无需管理帐户)

    我没有 也不会 拥有管理员帐户 我想从 java 更改 Active Directory 中自己 用户 的密码 我怎样才能做到这一点 使用来自网络的代码 private void changePass throws Exception St

随机推荐

  • 改变眼睛图像中特定区域的颜色[Matlab]

    I am trying to change the pupil of the following image This is not a feature extraction or eye detection task I want to
  • 修复 iPhone/iPad/iPod 上的 CSS 悬停问题

    我想修复 iOS 上的悬停效果 更改为触摸事件 但我不知道 让我解释一下 您的页面中有一段文字 div class mm hello world div 风格 mm color 000 padding 15px mm hover backg
  • std::cin 跳过空格

    所以我试图编写一个函数来检查一个单词是否在句子中 通过循环遍历 char 数组并检查相同的 char 字符串 只要句子中没有任何空格 该程序就可以运行 我用谷歌搜索了一下 他们都是同样的建议 cin getline 但无论我如何实现它 它要
  • 创建您自己的 .NET 程序集缓存

    在我正在编写的 net 应用程序中 我需要在本地缓存各个位置的程序集 以便即使原始位置不可用 我的应用程序也可以使用它们 我无法使用 GAC 主要是因为我想要可移植性 而且还因为程序集可能未签名 有谁知道任何支持此功能的 net 代码吗 我
  • 使用公共类实现 Monolog

    我成功地实现了用于测试目的的 Monolog 记录器 现在我正在尝试在项目中使用它 该项目不使用任何MVC框架 我正在尝试编写一个公共类文件来包装对 Monolog 实例的访问 常用类文件 文件 app log php require au
  • 如何根据其他 JSON 值获取 JSON 值

    我在 Go 中有一个来自 XML resp body 的结构 pdp sellableUnits attributes id 22555278 type size value 03 5 type sizeJ struct PDP struc
  • 引导标签之间没有间距

    在我的应用程序中 我试图有几个连续的标签 就像这样jsbin http jsbin com hesav 1 相反 我得到这个 正如您所看到的 标签之间没有间距 这可能是因为我的CSS有问题 但我无法找到罪魁祸首 bootstrap 中定义的
  • Marionette.Renderer、Underscore 模板和 i18next 国际化

    我们目前需要使用 Backbone Marionette 和下划线模板向中型应用程序添加国际化 经过一番彻底的研究后 出现了两种有效的选择 下属18n https github com ggozad underi18n它提供与下划线的直接集
  • 从多个表中选择 Sequelize

    我目前正在使用sequelize开发一个系统 我需要一个查询来从多个表中获取数据 如下所示 Select Courses id Rooms DisplayLabel Periods DisplayName Subjects Name fro
  • 对超过 UInt16 屏障的程序集信息进行版本控制

    过去 我通常使用变更集或 svn 编号来对二进制文件进行版本控制 例如1 1 123 3 其中较大的数字是来自源代码控制系统的变更集或版本 然而 对于我现在使用的系统 我们已经远远超过了类似 70000 变更集的 uint 障碍 因此在用作
  • jQuery dataTables - 获取过滤的列值

    我正在使用 jQuery dataTable 当用户选择一个下拉列表时 它会搜索数据表并对其进行过滤 并根据搜索到的数据重新绘制内容 mtTable columns each function mtTable column 22 searc
  • javascript 之谜:两个对象在构造函数、原型和 __proto__ 链接方面看起来相同,但行为不同

    我是一位经验丰富的面向对象程序员 但这让我着迷 为什么我可以执行 new f 而不能执行 new a 我将不胜感激任何指点 first a few facts if Object instanceof Function console lo
  • 如何使批量插入适用于多个表

    当存在外键关系时 如何使用SQL Server批量插入插入到多个表中 我的意思是桌子是这样的 CREATE TABLE dbo UndergroundFacilityShape FacilityID int IDENTITY 1 1 NOT
  • VSCode - 光标在 AltGr 上向左移动。如何修复它?

    如果我在 vscode 编辑器中输入以下文本 http stackoverflow com Link to Stackoverflow omg 我得到这个结果 https stackoverflow com Link to Stackove
  • 如何在 Objective-C 中调试单例

    我的应用程序包含几个单例 以下是本教程 http cocoawithlove com 2008 11 singletons appdelegates and top level html 然而 我注意到 当应用程序因单例而崩溃时 几乎不可能
  • 如何在 PowerShell 中重命名文件?

    我有 2 个任务需要使用 PowerShell 来完成 1 我还需要将所有index asp重命名为Default aspx 2 我有一个目录C WWW我需要重命名所有 asp文件到 aspx 递归地 我已经尝试过Rename Item命令
  • PHP ORA-01745: 无效的主机/绑定变量名警告

    01745 运行滚动代码时发出无效主机 绑定变量名称警告 我不确定为什么会发生这种情况请帮忙 我觉得我的绑定一定有问题 但我看不出它有什么问题 我的 Start 和 End 变量看起来像 DD MM YY 我在下面列出了 PHP 代码 谢谢
  • 在reactjs中,数组或迭代器中的每个子元素都应该有一个唯一的“key”属性

    我完全困惑了 因为我的控制台出错了 我阅读了reactjs文档和stackoverflow上的所有提示 但我不明白问题是什么 我看到书名列表 item volumeInfo title 但控制台有错误 这是我的代码 import React
  • 将 NSNumber 与 0 进行比较不起作用?

    我的应用程序中有一个 JSON 解析器 我将值加载到detailDataSourceDict 变量中 当我尝试获取数组的 valueForKey 并尝试将其与 0 进行比较时 它永远不会起作用 这是我的代码 if indexPath row
  • 无法使用 JMS 应用程序从 IBM MQ 获取响应

    我们使用 IBM MQ 以请求 回复方式与第三方进行通信 我们向他们发送请求 他们给我们答复 目前 我们都有一个简单的基于 Java 的本机 IBM MQ 应用程序 我们计划使用 spring jms 重写我们的代码 但是当使用 sprin