有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要向消息添加头,该消息将被发送到IBM MQ websphere

我不知道如何将消息头添加到发送到IBMMQWebSphereServer的消息中。以下是我尝试使用的代码,但我遇到异常:

创建与服务器的连接

        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

我被困在这里。如果这个问题解决了,那么谜语就完成了


共 (1) 个答案

  1. # 1 楼答案

    为什么要混合使用Java SE MQ API调用和JMS调用

    从手册中,在WebSphere MQ Class for Java的“处理消息属性”部分:

    Function calls to process message handles have no equivalent in WebSphere MQ classes for Java. To set, return, or delete message handle properties, use methods of the MQMessage class.

    因此,你为什么不简单地做:

    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)