使 JMS 消息出列的独立 Java [关闭]

Posted

技术标签:

【中文标题】使 JMS 消息出列的独立 Java [关闭]【英文标题】:Standalone Java to dequeue JMS messages [closed] 【发布时间】:2012-01-26 15:30:55 【问题描述】:

任何人都可以提供示例程序以在 Java 中使消息出队吗?我想要独立的java程序来完成这个任务。

假设 Oracle ha 使用 JMS_TEXT_MESSAGE 队列“myqueue”中的有效负载类型将消息排入队列,其所有者是“myowner”,现在我想使用 Java 将这些消息出列。任何人都可以提供独立Java的示例程序吗?

谢谢!


@Ratha,我尝试了您的示例,我可以浏览所有消息并且效果很好!

但是,当我尝试使用这些消息时,我认为它们会从队列中删除并通过以下行显示给我:

 System.out.println("MESSAGE RECEIVED " + msg.getText());

但相反,它在下面一行给了我错误:

 MessageConsumer consumer = session.createConsumer(queue);

Exception in thread "main" java.lang.AbstractMethodError: oracle.jms.AQjmsSession.createConsumer(Ljavax/jms/Destination;)Ljavax/jms/MessageConsumer;
at OracleAQClient.consumeMessage(OracleAQClient.java:141)
at OracleAQClient.main(OracleAQClient.java:159)

你能帮我解决这个错误吗?

谢谢!

【问题讨论】:

您应该能够从 jmx-console 中的队列中删除消息。 @Mike:在这里你不会得到整个程序。只需解释到目前为止您尝试过的任何事情。 【参考方案1】:

您可以修改供应商特定或供应商中立的代码。 要使消息出队,请使用以下代码块

 public static void consumeMessage(String user, String queueName)   
  Queue queue;
  try 
   QueueConnection QCon = getConnection();  
   Session session = QCon.createQueueSession(false,Session.CLIENT_ACKNOWLEDGE);
   QCon.start();
   queue = ((AQjmsSession) session).getQueue(user, queueName);
   MessageConsumer consumer = session.createConsumer(queue);
   TextMessage msg = (TextMessage) consumer.receive();
   System.out.println("MESSAGE RECEIVED " + msg.getText());

   consumer.close();
   session.close();
   QCon.close();
   catch (JMSException e)   
   e.printStackTrace();
  
 

我写过,这些帖子,里面有更详细的代码;

http://vvratha.blogspot.com/2011/10/creating-queue-in-oracleaq.html

http://vvratha.blogspot.com/2011/10/java-client-for-jndi-lookup-with-ojms.html

【讨论】:

只链接到其他网站的答案不是好的答案。

以上是关于使 JMS 消息出列的独立 Java [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

对于独立应用程序(对于 Spring JMS),Java main 方法应该是啥?

跨语言消息传递[关闭]

将独立 JMS 应用程序移植到 Web/应用程序服务器

将JMS消息从Java EE应用程序发送到Java SE应用程序

[Java技术堂-五] JMS-ActiveMQ交流学习

消息框操作系统。独立[关闭]