Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从侦听器onmessage向MQQueue发送消息_Java_Jms_Ibm Mq - Fatal编程技术网

Java 从侦听器onmessage向MQQueue发送消息

Java 从侦听器onmessage向MQQueue发送消息,java,jms,ibm-mq,Java,Jms,Ibm Mq,我有一个特殊的场景,其中: MQSender(向IBMMQ中的测试队列发送“Hello”文本消息) MQSenderInternal(将“循环”文本消息发送到中的测试队列 IBMMQ) MQListener(接收消息,如果是Hello,则发送另一条消息 带有MQSenderInternal的消息) MQSender作为独立Java应用程序运行,而MQSenderInternal和MQListener是同一jar的一部分,部署在JBoss服务器中 该流的运行方式如下-->MQSender-->

我有一个特殊的场景,其中:

  • MQSender(向IBMMQ中的测试队列发送“Hello”文本消息)
  • MQSenderInternal(将“循环”文本消息发送到中的测试队列 IBMMQ)
  • MQListener(接收消息,如果是Hello,则发送另一条消息 带有MQSenderInternal的消息)
MQSender作为独立Java应用程序运行,而MQSenderInternal和MQListener是同一jar的一部分,部署在JBoss服务器中

该流的运行方式如下-->MQSender-->MQListener-->MQSenderInternal-->MQListener(由于消息是循环,因此应该停止)

问题是,当MQListener调用MQSenderInternal将消息发送到它所侦听的队列时,它抛出一个异常(JMSCC0109:消息驱动bean抛出了一个运行时异常),并进入一个重新传递无限循环

我希望能够从侦听消息的onmessage方法内部向测试队列发送消息,而不会引发任何异常。。。这可能吗

片段:

MQSender

MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName(host);
cf.setPort(port);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager(manager);
cf.setChannel(channel);

MQQueueConnection connection = (MQQueueConnection)
cf.createQueueConnection();

MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue(queuename);
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
TextMessage message = (TextMessage) session.createTextMessage("Hello");

// Start the connection
connection.start();
sender.send(message);

sender.close();
session.close();
connection.close();
MQSenderInternal

MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName(host);
cf.setPort(port);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager(manager);
cf.setChannel(channel);

MQQueueConnection connection = (MQQueueConnection)
cf.createQueueConnection();

MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue(queuename);
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
TextMessage message = (TextMessage) session.createTextMessage("Loop");

// Start the connection
connection.start();
sender.send(message);

sender.close();
session.close();
connection.close();
MQListener

public void onMessage(Message rcvMessage) {
    TextMessage msg = null;
    try {
        if (rcvMessage instanceof TextMessage) {
            msg = (TextMessage) rcvMessage;

            if (msg.getText().equals("Loop")) {
                System.out.println("Received Message from internal sender: "
                        + msg.getText());
            } else {
                System.out.println("Received Message from standalone sender: "
                        + msg.getText());

                MQSenderInternal.send();
            }
        } else {
            System.out.println("Message of wrong type: "
                    + rcvMessage.getClass().getName());
        }
    } catch (JMSException e) {
        e.printStackTrace(); ;
        mdbContext.setRollbackOnly();
    }
}

非常感谢您的帮助:)

引发的运行时异常是什么?@timmcormick NoClassDefFound for com.ibm.mq.jms.MQQueueConnectionFactory。。。这很奇怪,因为JAR是包含在内的。如果您将JAR文件与应用程序捆绑在一起,您就会看到这种问题,而IBM不支持这种情况。正确的方法是在JBoss中安装MQ JCA资源适配器。这就是你所做的吗?@Timmccomick对迟来的回答表示抱歉,但是是的,这是一个jar依赖性问题,谢谢你的提示!