深入掌握JMS(七):DeliveryMode例子

在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。

  1. importjavax.jms.Connection;
  2. importjavax.jms.DeliveryMode;
  3. importjavax.jms.MessageProducer;
  4. importjavax.jms.Queue;
  5. importjavax.jms.Session;
  6. importorg.apache.activemq.ActiveMQConnectionFactory;
  7. importorg.apache.activemq.command.ActiveMQQueue;
  8. publicclassDeliveryModeSendTest{
  9. publicstaticvoidmain(String[]args)throwsException{
  10. ActiveMQConnectionFactoryfactory=newActiveMQConnectionFactory("vm://localhost");
  11. Connectionconnection=factory.createConnection();
  12. connection.start();
  13. Queuequeue=newActiveMQQueue("testQueue");
  14. Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
  15. MessageProducerproducer=session.createProducer(queue);
  16. producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  17. producer.send(session.createTextMessage("ApersistentMessage"));
  18. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  19. producer.send(session.createTextMessage("AnonpersistentMessage"));
  20. System.out.println("Sendmessagessucessfully!");
  21. }
  22. }

运行上面的程序,当输出“Send messages sucessfully!”时,说明两个消息都已经发送成功,然后我们结束它,来停止JMS Provider。

接下来我们重新启动JMS Provicer,然后添加一个消费者:

  1. importjavax.jms.Connection;
  2. importjavax.jms.JMSException;
  3. importjavax.jms.Message;
  4. importjavax.jms.MessageConsumer;
  5. importjavax.jms.MessageListener;
  6. importjavax.jms.Queue;
  7. importjavax.jms.Session;
  8. importjavax.jms.TextMessage;
  9. importorg.apache.activemq.ActiveMQConnectionFactory;
  10. importorg.apache.activemq.command.ActiveMQQueue;
  11. publicclassDeliveryModeReceiveTest{
  12. publicstaticvoidmain(String[]args)throwsException{
  13. ActiveMQConnectionFactoryfactory=newActiveMQConnectionFactory("vm://localhost");
  14. Connectionconnection=factory.createConnection();
  15. connection.start();
  16. Queuequeue=newActiveMQQueue("testQueue");
  17. Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
  18. MessageConsumercomsumer=session.createConsumer(queue);
  19. comsumer.setMessageListener(newMessageListener(){
  20. publicvoidonMessage(Messagem){
  21. try{
  22. System.out.println("Consumerget"+((TextMessage)m).getText());
  23. }catch(JMSExceptione){
  24. e.printStackTrace();
  25. }
  26. }
  27. });
  28. }
  29. }

运行上面的程序,可以得到下面的输出结果:

Consumer get A persistent Message

可以看出消息消费者只接收到一个消息,它是一个Persistent的消息。而刚才发送的non persistent消息已经丢失了。

另外, 如果发送一个non persistent消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.

你可能感兴趣的:(live)