我试图将一些消息从JMS代码放到本地队列管理器中定义的本地队列中。我在WebSphere MQ中定义了一个本地队列LQ
,并使用JMS代码放置消息。我在这里做得对吗。我没有看到WebSphere队列中的消息。
以下是代码:
try {
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
//set up the Connection Configuration values
// Set the properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "HostName");
cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "TEST.JMS");
//JNDI is Not used Here
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("queue:///LQ");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
JMSTextMessage message = (JMSTextMessage) session.createTextMessage("MQJMSTest "+ uniqueNumber);
//MQMessage message = (MQMessage) session.createTextMessage("MQJMSTest "+ uniqueNumber);
// Start the connection
connection.start();
sender.send(message);
System.out.println("Sent message:\\n" + message);
//JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
// System.out.println("\\nReceived message:\\n" + receivedMessage);
sender.close();
receiver.close();
session.close();
connection.stop();
connection.close();
System.out.println("\\nSUCCESS\\n");
} catch (JMSException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println(e);
System.out.println("\\nFAILURE\\n");
}
catch (Exception e){
System.out.println(e);
System.out.println("\\nFAILURE\\n");
}
根据这一点,您已经创建了一个事务会话:
connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
根据文件,
当应用程序关闭事务会话时,会发生隐式回滚。当应用程序关闭连接时,该连接的所有事务会话都会发生隐式回滚。
回滚将删除队列中的任何消息,直到它们在放置它们的应用程序之外变得可见。所以我想你可能想完成交易,是吗?
sender.send(message);
// ADD THIS HERE ===========================
session.commit();
// ADD THIS HERE ===========================
System.out.println("Sent message:\\n" + message);
// THE COMMIT MUST HAVE OCCURRED BEFORE YOU CAN GET THE MESSAGE
// BACK OUT OF THE QUEUE IN THE NEXT LINES
//JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
// System.out.println("\\nReceived message:\\n" + receivedMessage);
// ===================================================
// DON'T FORGET TO COMMIT THE MESSAGE ON THE WAY BACK OUT OR IT WILL
// JUST GE TPUT BACK ON THE QUEUE AGAIN.
// session.commit();
// ===================================================
sender.close();
receiver.close();
session.close();
PS:请参阅JMS异常处理部分。JMS异常是一个多层结构,其中期望将特定于供应商的诊断放置在较低级别的元素中。只有打印那些较低级别的元素,才有可能知道传输层认为什么是错误的。
这是我的配置: 这是我的消费者: 因此,我将一条消息放入队列,其中有效负载=“launch”。 我想测试事务,如果有效负载等于“launch”,它就会抛出一个异常。 因此,多亏了重新交付政策,消费者尝试使用该消息5次。在ActiveMq队列列表中的第五个之后,我没有看到我发送的消息。 消息放在哪里?在死信队列中?在哪里可以看到带有“launch”消息的死信队列? 谢谢
我正在尝试将JMS队列注入到无状态EJB中。我的代码看起来是这样的: 当我试图将其部署到应用程序服务器(Wildfly 9.0.2)时,引发了以下异常 如果我将mappedName更改为远程JNDI名称,它就会起作用 或者我将无状态EJB切换到一个依赖的CDI Bean Wildfly配置如下所示: 那么,为什么不能将JMS队列注入到无状态EJB中,为什么它可以在CDI bean中工作呢?我做错了
我是JMS新手,经过长时间的搜索,我搜索出了一个连接到JMS的代码,并发布了一条消息。 问题是我需要在远程队列中发布消息,但我不知道如何建立连接到它并发布消息。 服务器类型:TIBCO EMS 服务器主机:******。net 端口:**USername:user passsbrow:user123 队列:**。。。。顺序经营1. 我想建立连接,发布一条简单的消息,然后把它取回。请帮忙!提前谢谢
问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja
我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。
我试图通过AMQP 1.0协议向Qpid代理发送消息。队列名为,它已经在默认的虚拟主机下创建。但是,永远卡住了。相同的代码适用于连接到Azure服务总线。我使用的是qpid-jms-Client 0.58。生产者代码是: 生产时应用程序的线程转储 我尝试运行这个示例,得到了相同的结果。