我不确定如何将消息头添加到我们发送给IBM MQ websphere服务器的消息中。下面是我尝试使用的代码,但我得到例外:
创建与服务器的连接
qMgr = new MQQueueManager(queueMgr, props);
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF
| MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
queue = qMgr.accessQueue(queueName, openOptions);
message = new MQMessage();
发送消息
public String sendMessage(){
MQPutMessageOptions pmo = new MQPutMessageOptions();
message.format = MQC.MQFMT_STRING;
message.feedback = MQC.MQFB_NONE;
message.messageType = MQC.MQMT_DATAGRAM;
message.messageId = MQC.MQMI_NONE;
message.correlationId = MQC.MQCI_NONE;
message.writeString(sMsg);
queue.put(message,pmo);
}
我尝试使用以下代码添加标题
((TextMessage)message).setStringProperty(header_name,header_value);
但我得到例外java.lang.ClassCastException: com.ibm.mq.MQMessage cannot be cast to javax.jms.TextMessage
。
我被困在这里。如果这个问题得到解决,那么谜语就完成了。
答案 0 :(得分:3)
为什么要将Java SE MQ API调用与JMS调用混合使用?
在手册的“处理邮件属性”部分中, for WebSphere MQ classes for Java:
处理消息句柄的函数调用没有等效的 WebSphere MQ classes for Java。设置,返回或删除消息 处理属性,使用MQMessage类的方法。
因此,你为什么不这样做:
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options = MQC.MQPMO_FAIL_IF_QUIESCING | MQC.MQPMO_NO_SYNCPOINT;
message.format = MQC.MQFMT_STRING;
message.feedback = MQC.MQFB_NONE;
message.messageType = MQC.MQMT_DATAGRAM;
message.messageId = MQC.MQMI_NONE;
message.correlationId = MQC.MQCI_NONE;
message.setStringProperty(header_name,header_value)
message.writeString(sMsg);
queue.put(message,pmo);
最后一点,请不要回复说你不能这样做,因为你正在使用WMQ v6。 WMQ v6差不多2年前就失去了支持,所以你必须升级到WMQ v7。*(最好是WMQ v7.5)。