用于将JMS消息出列的独立Java

时间:2011-12-23 07:08:17

标签: java java-ee jms

任何人都可以提供示例程序来使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)

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

 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