JMS和IBM WebSphere不生成COD
我正在创建一个应用程序,该应用程序使用JMS使用来自MQ的消息。我的MQ管理器是IBM WebSphere MQ,我正在使用IBM jms实现来使用消息 消息传来传去很顺利。我接收来自另一方的消息,我可以向他们发送消息。问题是,在我使用队列中的消息之后,他们没有收到COD。他们收到了COA,但没有COD 这是我的接收消息代码:JMS和IBM WebSphere不生成COD,jms,ibm-mq,Jms,Ibm Mq,我正在创建一个应用程序,该应用程序使用JMS使用来自MQ的消息。我的MQ管理器是IBM WebSphere MQ,我正在使用IBM jms实现来使用消息 消息传来传去很顺利。我接收来自另一方的消息,我可以向他们发送消息。问题是,在我使用队列中的消息之后,他们没有收到COD。他们收到了COA,但没有COD 这是我的接收消息代码: public byte[] readMsgFromClient() throws JMSException { byte[] message = null
public byte[] readMsgFromClient() throws JMSException {
byte[] message = null;
QueueReceiver reader = null;
try {
connection = getQueueConnection();
connection.start();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(config.getQueueRsp());
((MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
reader = session.createReceiver(queue);
JMSBytesMessage byteMessage = (JMSBytesMessage) reader.receive(3000);
if (byteMessage != null) {
message = new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(message);
}
} finally {
if (reader != null) {
reader.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
return message;
}
我必须手动发送COD吗?我是否必须将WebSphere配置为自动发送COD?我是否必须通知WebSphere我的应用程序已经使用了该消息?COD消息可能以RC(原因码)为2035(未授权)的死信队列(DLQ)结尾 下面是另一个你通过艰苦的方式学到的东西:
- COA消息在队列管理器的用户ID下生成
- COD消息是在发件人消息的用户ID下生成的李>
因此,发件人的用户ID没有将消息放入远程队列管理器的权限。COD消息可能以RC(原因码)为2035(未授权)的死信队列(DLQ)结尾 下面是另一个你通过艰苦的方式学到的东西:
- COA消息在队列管理器的用户ID下生成
- COD消息是在发件人消息的用户ID下生成的李>
因此,发件人的用户ID没有将消息放入远程队列管理器的权限。如@Roger所述,放入COD的权限基于发送消息的MQMD中的用户ID 如果不想将远程用户添加到本地系统,可以使用IBM红皮书“”中提供的itsoME出口。最新版本可在“附加材料”链接下找到 使用此出口,您需要在RCVR或RQSTR通道上设置MCAUSER,并使用以下属性配置该通道:
MSGEXIT('itsoME(MsgExit)')
MSGDATA('MCA/')
结果是MQMD的UserIdentifier字段将更改为通道上配置的MCAUSER的值。然后将MCAUSER+put和+passid提供给返回到远程队列管理器的XMITQ
如果您不想允许COA/COD,则可以将出口用于其他用途,例如删除报告选项。如@Roger所述,放置COD的权限基于发送消息的MQMD中的用户ID 如果不想将远程用户添加到本地系统,可以使用IBM红皮书“”中提供的itsoME出口。最新版本可在“附加材料”链接下找到 使用此出口,您需要在RCVR或RQSTR通道上设置MCAUSER,并使用以下属性配置该通道:
MSGEXIT('itsoME(MsgExit)')
MSGDATA('MCA/')
结果是MQMD的UserIdentifier字段将更改为通道上配置的MCAUSER的值。然后将MCAUSER+put和+passid提供给返回到远程队列管理器的XMITQ
如果您不想允许COA/COD,则可以将退出用于其他事情,例如删除报告选项。奇怪的是,另一部分询问了很多DLQ是否有任何消息,但它是空的,DLQ没有消息。你还认为可能是权限问题吗?无论如何,我会和负责权限管理的部门谈谈。谢谢你的快速回复!奇怪的是,另一部分问了很多DLQ是否有消息,但它是空的,DLQ没有消息。你还认为可能是权限问题吗?无论如何,我会和负责权限管理的部门谈谈。谢谢你的快速回复!提供的答案中有一个解决了你的问题吗?没有。COA不是由MQ发送的,而是很久以前在glaxy遥远的地方有人制作了一个DLL来响应COA。IBM MQ 7.5知识中心页面“”表示COA和COD消息都是由队列管理器生成的。我不知道动态链接库是怎么来的?我也是!我不知道他们是怎么做到的,但似乎永远都是这样做的,当我们让队列管理器自己处理它时,COA从未发送,只有COD。我们搜索了队列和通道的配置,但没有关于COA或COD的信息。很抱歉,我无法提供更多帮助。请注意,COA/COD是根据消息发送时MQMD中设置的报告选项生成的。如果未设置COA报告选项,则队列管理器将不会生成该选项。您可以使用示例amqsbcg查看消息上的报告选项。如果应用程序正在发送COA/COD报告选项,则MQ应作出响应。我有点不清楚,你的问题说没有发送COD,他们只收到COA,但在你的评论中,你说COA从来没有只发送COD。我的回答与COD有关。我首先要检查哪些报告选项