需要向将发送到IBM MQ websphere的消息添加消息头



我不确定如何将消息头添加到我们发送到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);
}

我尝试用下面的代码添加Header

((TextMessage)message).setStringProperty(header_name,header_value);

但是我得到了例外java.lang.ClassCastException: com.ibm.mq.MQMessage cannot be cast to javax.jms.TextMessage

我被困在这里。

为什么将Java SE MQ API调用与JMS调用混合在一起?

从手册中,在Java的WebSphere MQ类的"处理消息属性"一节中:

对进程消息句柄的函数调用在用于Java的WebSphere MQ类。设置、返回或删除消息处理属性,使用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在大约两年前就不再支持了,因此您必须升级到WMQ v7。

最新更新