- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是MQ程序员的新手。根据我的要求,我试图将示例XML消息放入队列中,并期望从响应队列中返回响应。
我可以看到关联的通道打开的时间很短,持续了几秒钟,然后又关闭了。请在下面找到我用来将消息放入队列的代码。请您提供宝贵的意见以解决此问题。
错误:
Process(12908.13579) User(abc) Program(amqrmppa)
Host(hostname)
AMQ9208: Error on receive from host 10 (10.0.0.1).
EXPLANATION:
An error occurred receiving data from 10 (10.0.0.1) over TCP/IP. This may
be due to a communications failure.
package com.company.mq;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
public class MQConnection {
private static final String CORR_ID = "CORRELID";
String qMgrStr = "";
String hostName = "hostname";
String password ="xxxx";
String userName ="username";
String putqueueName = "putqueuename";
String getqueuename = "getqueuename ";
String channel = "channel";
String replyToQueue = "replyToQueue";
String replyToQueueManager = "";
static String content = "";
int port =10000;
MQQueue readQueue = null;
MQQueue writeQueue = null;
MQQueueManager qManager;
@SuppressWarnings("unchecked")
public void init(){
MQEnvironment.hostname =hostName;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
MQEnvironment.userID = userName;
MQEnvironment.password = password;
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
try {
qManager = new MQQueueManager("");
System.out.println("qManager====>"+qManager);
}catch(Exception e){
e.printStackTrace();
}
try {
System.out.println("qManager==> hhh"+qManager);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String putAndGetMessage() throws InterruptedException, IOException{
int openOptions = MQC.MQOO_OUTPUT | MQC.MQPMO_SET_ALL_CONTEXT | MQC.MQOO_FAIL_IF_QUIESCING;
String msgString = content.toString();
System.out.println("msgString=="+msgString);
int expiryTime =60000;
MQMessage getmessage = null;
int waitInterval =4000;
try {
System.out.println("qManager Desc==>"+qManager.getDescription());
writeQueue =openWriteQueue(qManager,putqueueName);
MQMessage message = myPut(writeQueue,msgString,expiryTime,getqueuename);
// qManager.accessQueue(putqueueName, openOptions,null,null,null);
readQueue =openReadQueue(qManager,getqueuename);
getmessage =mqGet(readQueue,waitInterval,message.messageId);
/*MQMessage msg = new MQMessage();
msg.messageType = MQC.MQMT_REQUEST;
msg.format = "MQSTR";
// msg.characterSet = 500;
msg.persistence = MQC.MQPER_NOT_PERSISTENT;
msg.correlationId = CORR_ID.getBytes();
// msg.messageId = CORR_ID.getBytes();
msg.expiry= 10000;*/
/*System.out.println("before");
Thread.sleep(10000);
System.out.println("after");*/
/*MQGetMessageOptions gmo = new MQGetMessageOptions();
int openOptions1 = MQC.MQGMO_WAIT| MQC.MQGMO_CONVERT| MQC.MQGMO_FAIL_IF_QUIESCING;
System.out.println("in getqManager==>"+qManager);
readQueue = qManager.accessQueue(getqueuename, openOptions1);
System.out.println("deafaultQueue======>"+readQueue);
readQueue.get(getmessage,gmo);
System.out.println(getmessage.readInt());
String retriveMsg = getmessage.readUTF();
System.out.println("read===>"+retriveMsg);*/
} catch(MQException e){
e.printStackTrace();
}
return getmessage.readString(getmessage.getMessageLength());
}
private MQMessage mqGet(MQQueue readQueue2, int waitInterval,
byte[] corrID) throws MQException {
MQMessage responseMessage = new MQMessage();
responseMessage.correlationId =corrID;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options =MQC.MQGMO_WAIT| MQC.MQGMO_CONVERT| MQC.MQGMO_FAIL_IF_QUIESCING;
gmo.matchOptions = MQC.MQMO_MATCH_CORREL_ID;
gmo.waitInterval = waitInterval;
// TODO Auto-generated method stub
readQueue2.get(responseMessage,gmo);
return responseMessage;
}
private MQQueue openReadQueue(MQQueueManager manager, String getqueuename2) throws MQException {
// TODO Auto-generated method stub
return openQueue(manager,getqueuename2,MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE |MQC.MQOO_FAIL_IF_QUIESCING);
}
private MQMessage myPut(MQQueue writeQueue2, String msgString,
int expiryTime, String getqueuename2) {
// TODO Auto-generated method stub
MQPutMessageOptions mpo =new MQPutMessageOptions();
mpo.options = MQC.MQPMO_NEW_MSG_ID | MQC.MQMO_MATCH_CORREL_ID;
MQMessage putmessage = new MQMessage();
putmessage.format = MQC.MQFMT_STRING;
putmessage.messageFlags = MQC.MQMT_REQUEST;
putmessage.replyToQueueName =replyToQueue;
putmessage.replyToQueueManagerName = qMgrStr;
putmessage.userId="userId";
putmessage.expiry =expiryTime;
try {
putmessage.write(msgString.getBytes());
try {
writeQueue2.put(putmessage,mpo);
} catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return putmessage;
}
private MQQueue openWriteQueue(MQQueueManager manager, String queueName) throws MQException{
// TODO Auto-generated method stub
return openQueue(manager,queueName,MQC.MQOO_OUTPUT | MQC.MQPMO_SET_ALL_CONTEXT | MQC.MQOO_FAIL_IF_QUIESCING);
}
private MQQueue openQueue(MQQueueManager manager, String queueName, int options) throws MQException{
// TODO Auto-generated method stub
return manager.accessQueue(queueName, options,null,null,null);
}
/**
* @param args
* @throws IOException
* @throws InterruptedException
*/
public static void main(String[] args) throws IOException, InterruptedException {
// TODO Auto-generated method stub
MQConnection conn = new MQConnection();
DataInputStream dis = new DataInputStream ( new FileInputStream ("c://request//Request.xml"));
byte[] datainBytes = new byte[dis.available()];
dis.readFully(datainBytes);
dis.close();
content = new String(datainBytes, 0, datainBytes.length);
//System.out.println("content===>"+content);
conn.init();
System.out.println("connected");
conn.putAndGetMessage();
}
}
最佳答案
该应用程序似乎是封装MQ I / O的类。在实例化时,init
例程构造该类并尝试连接到队列管理器。我看到的代码存在一些问题。另外,我怀疑我知道为什么代码会失败,但是问题中没有提供诊断信息,因此我只能猜测。我将先描述问题,然后再描述通常需要的诊断信息。
代码问题
该代码提供了用户ID和密码。除非这是与v8.0队列管理器对话的v8.0客户端,或者是使用出口通过TLS通道与MQ对话的客户端,否则不会检查密码,也不需要密码。更糟糕的是,如果通道不是TLS加密的,则ID和密码将通过网络以明文方式传输。取出密码。仅在需要在连接请求中覆盖应用提供的ID时,才使用ID。
该代码未打印链接的异常。 JMS异常是一种多层次的数据结构,其中顶层是JMS理解的异常,而较低层的异常是传输提供商所理解的异常。许多传输提供程序,尤其是那些用纯Java编写的传输提供程序,仅使用数据结构的顶层,并且不提供链接的异常。但是,作为开发人员,您不能假定情况永远不会如此。
没有合理的理由让JMS开发人员无法打印链接的异常。
当我在一家大型银行管理MQ Admin团队时,我的政策是,如果不遵循以下规则,那么生产将一无所有:
遇到JMS异常时,代码必须打印链接的异常。
如果没有链接到JMS Exception的异常,则代码必须打印字符串“未找到链接的异常”,以便我们知道它至少已查找了一个。
该代码使用MQC.MQPMO_SET_ALL_CONTEXT
选项打开队列。通常不向非管理员用户授予此级别的特权。该代码明确指定了一个ID,表明它没有以管理员权限运行。由于这些原因,我怀疑您遇到2035错误,因为代码无法打印链接的异常,所以您当然看不到该错误。
缺少诊断
MQ的行为因版本而异。多年来,已经对Java / JMS类进行了重新包装,重构和升级,使其分别为JMS 1.1和JMS 2.0。诊断问题(无论是在此处发布还是在生产中断时发送到您的MQ管理员界面)应指示正在使用的MQ客户端和MQ服务器的版本。客户端节点和服务器节点上的dspmqver -a
输出总是很有帮助的。
如前所述,链接的异常不会被打印。没有它,堆栈跟踪可能一文不值,因此,我一次也不感到失望,没有提供堆栈跟踪。但是,更新代码以打印链接的异常,并在将来包含堆栈跟踪。
客户端和服务器均会生成错误日志。除了队列管理器的错误日志之外,服务器上还有全局错误日志,用于识别队列管理器之前发生的事情或在全局MQ配置上运行的命令。在这种情况下,没有提供来自任何这些来源的错误日志信息。为什么不?
服务器还会生成事件消息。这些通常由监视代理程序使用,但可以由管理员启用并进行检查以确定问题。在没有错误日志消息的情况下,事件消息可能会非常有帮助。在这种情况下,我不希望它们出现,但是为了完整起见,请在此处提及。
FDC文件由队列管理器生成,并与全局错误日志存储在同一目录中。它们提供的信息比错误日志条目要详细得多,但并非总是产生。通常,问题诊断请求会提到没有生成FDC文件,或者提到它们并提供了它们的标题块。
资源资源
请参见:
MQ Knowledge Center(如果尚未找到)。
特别是troubleshooting部分,
以及linked exceptions部分。 (尽管这些不是特定于MQ的,但IBM至少提供了一些可以复制和粘贴的示例代码。请确保将其粘贴为纯文本并更正所有弯引号。)
MQ SupportPacs页,
...尤其是MS0T是最新的MQ Explorer(与后端QMgrs一起使用),而MS0P是一组插件,这些插件使Explorer可以解析事件消息等。
IBM的MQDev社区。尽管这对于查找文章和参考资料非常有用,但这些论坛是中等水平的。
对于社区,我更喜欢Vienna MQ list server或MQSeries.net上的论坛。两者都是繁荣的开发人员,管理员和IBM员工社区。
当然,请继续在websphere-mq标记中发布。上述两个社区都没有针对MQ完善的FAQ,而Stack Overflow提供了该功能。有几个MQ的老手和IBM员工正在策划Stack Overflow MQ标签。
如果您可以管理资金和差旅,请参加MQ Tech Conference。 IBM曾经召开过Transaction and Messaging会议,但是将它们与WebSphere的其余部分结合在一起形成了IMPACT。去年,它将包括IMPACT在内的多个会议合并到了Interconnect中。 MQ Tech会议整周都是MQ,而且价格便宜。由于IBM将其MQ课程和培训外包,因此课堂培训是不太可行的选择,并且会议涵盖了课堂培训中没有的材料。
坚持下去,祝你好运!
完全公开:我是MQ Tech会议的创始人之一,我的MQ咨询公司是赞助商。但是,在去年的第一天,它的MQ会话几乎与Interconnect整周的MQ会话一样多,因此我认为在推荐它方面不会有利益冲突。
关于java - 通过Java代码关闭MQ channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29690318/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!