I am working with a send/receive mechanism to a Websphere MQ system.

The xml that I send in text format should receive a reply, however I receive no reply.

I know that the xml is being "sent" ok, since "things are happening" in the target system - it is just that I am not receiving a reply. The reply is important to me, since it could include an error message if something should fail.

So, the reason I am not receiving a reply - I am not sure if there is a problem with my code or with the Websphere MQ configuration.

Any pointers on my code or what I should ask the Websphere MQ administrators to look at are greatly appreciated!!

A small self contained example to demonstrate the receive is not happening looks like this:

public class CustomQueueConnection {
    private MQQueueConnectionFactory connectionFactory;
    private MQQueueConnection connection;

    private void runTest() throws JMSException {
        connect();
        MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
        MQQueue queue = (MQQueue) session.createQueue("queue:///REQ_SNAPSHOT.HT");
        MQQueueSender sender = (MQQueueSender) session.createSender(queue);
        TemporaryQueue temporaryQueue = session.createTemporaryQueue();
        MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(temporaryQueue);

        TextMessage message = session.createTextMessage(
                "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
                // my well constructed xml goes here...
        );

        message.setJMSReplyTo(temporaryQueue);
        sender.send(message);
        System.out.println("Sent: " + message);
        JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
        System.out.println("Received: " + receivedMessage);
    }

    public boolean connect() {
        boolean connected = false;
        try {
            connectionFactory = new MQQueueConnectionFactory();
            connectionFactory.setCCSID(819);
            connectionFactory.setPort(1417);
            connectionFactory.setHostName("1.2.3.4");
            connectionFactory.setQueueManager("GATE1");
            connectionFactory.setChannel("CLIENTS.CHANNEL");
            connectionFactory.setTemporaryModel("GATEWAY_MODEL_QUEUE");
            connectionFactory.setTempQPrefix("MACHINE.USER_NAME.*");
            connectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);

            connection = (MQQueueConnection) connectionFactory.createQueueConnection();
            connected = true;
        } catch (JMSException e) {
            connected = false;
        }
        return connected;
    }

    public static void main(String[] args) throws JMSException {
        new CustomQueueConnection().runTest();
    }

}

And here is the output:

Sent:
        JMS Message class: jms_text
        JMSType:         null
        JMSDeliveryMode: 2
        JMSExpiration:   0
        JMSPriority:     4
        JMSMessageID:    ID:414d512050314f47415445312020202053599032201b4d05
        JMSTimestamp:    1398680728618
        JMSCorrelationID:null
        JMSDestination:  queue:///REQ_SNAPSHOT.HT
        JMSReplyTo:      queue://GATE1/MACHINE.USER_NAME.53599032201B4E04?persistence=1
        JMSRedelivered:  false
        JMS_IBM_PutDate:20140428
        JMSXAppID:WebSphere MQ Client for Java
        JMS_IBM_PutApplType:28
        JMSXUserID:aomis
        JMS_IBM_PutTime:10252859
        JMSXDeliveryCount:0
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<esb:esbMessage xmlns:esb="http://ESBServices
        Another 557 character(s) omitted
        Received: null

(NB: Received: null)

edit: Websphere MQ version is 6.0.25

有帮助吗?

解决方案 2

The solution was twofold.

First, the connection needed to be started right after it was created.

        connect();
        connection.start();

Secondly, the message needed to be sent with DeliveryMode.NON_PERSISTENT.

其他提示

Your code looks OK to me, message send is successful. I would like you to check:

1) Is there an application running to receive message from REQ_SNAPSHOT.HT queue?

2) Assuming there is an application running and receiving messages, has that application processed the incoming XML message successfully? is it throwing any exceptions?

3) If the incoming message is processed successfully, has it put a reply to the correct reply queue "MACHINE.USER_NAME.53599032201B4E04"? check if it faced any problems while putting the reply message.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top