【问题标题】:Standalone Java to dequeue JMS messages [closed]使 JMS 消息出列的独立 Java [关闭]
【发布时间】: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:在这里你不会得到整个程序。只需解释到目前为止您尝试过的任何事情。

标签: java jakarta-ee jms


【解决方案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

【讨论】:

  • 只链接到其他网站的答案不是好的答案。
猜你喜欢
  • 2023-03-04
  • 2010-11-05
  • 2018-09-29
  • 2013-03-23
  • 1970-01-01
  • 2014-05-08
  • 2013-03-10
  • 2014-01-21
  • 2011-10-01
相关资源
最近更新 更多