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的消息)
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依赖性问题,谢谢你的提示!