import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; public class QueueTest { public static void main(String[] args) throws Exception { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); Connection connection = factory.createConnection(); connection.start(); //建立一個Queue Queue queue = new ActiveMQQueue("testQueue"); //建立一個Session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //註冊消費者1 MessageConsumer comsumer1 = session.createConsumer(queue); comsumer1.setMessageListener(new MessageListener(){ public void onMessage(Message m) { try { System.out.println("Consumer1 get " + ((TextMessage)m).getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //註冊消費者2 MessageConsumer comsumer2 = session.createConsumer(queue); comsumer2.setMessageListener(new MessageListener(){ public void onMessage(Message m) { try { System.out.println("Consumer2 get " + ((TextMessage)m).getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //建立一個生產者,而後發送多個消息。 MessageProducer producer = session.createProducer(queue); for(int i=0; i<10; i++){ producer.send(session.createTextMessage("Message:" + i)); } } }
運行這個例子會獲得下面的輸出結果:java
Consumer1 get Message:0
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:9
能夠看出每一個消息只被消費了一次,可是若是有多個消費者同時監聽一個Queue的話,沒法肯定一個消息最終會被哪個消費者消費。apache