2013-04-03 41 views
0

這裏是服務器的代碼:的ActiveMQ:如何獲得一個隊列中的所有消息接收器(JAVA)

import java.net.UnknownHostException; 
import java.io.IOException; 
import org.apache.activemq.transport.stomp.StompConnection; 
public class Server{ 

public static void main(String[] args) { 
    try { 
     StompConnection con = new StompConnection(); 
     con.open("localhost", 61618); 
     con.connect("admin", "admin123"); 
     con.begin("a1"); 
     con.send("/queue/test1", "This is test message 1"); 
     con.send("/queue/test1", "This is test message 2"); 
     con.send("/queue/test1", "This is test message 3"); 
     con.commit("a1"); 
     con.disconnect(); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

下面是客戶端的代碼:

import java.io.IOException; 
import java.net.UnknownHostException; 
import java.util.Scanner; 
import org.apache.activemq.transport.stomp.StompConnection; 
import org.apache.activemq.transport.stomp.StompFrame; 
import org.apache.activemq.transport.stomp.Stomp.Headers.Subscribe; 

public class Client { 

public static void main(String[] args) { 
    try { 
     //login. 
     Scanner in = new Scanner(System.in); 
     System.out.print("Password: "); 
     String pass = in.next(); 
     if (!"123".equals(pass)){ 
      System.out.println("Sorry, wrong password."); 

     } 
     else 
     { 
      StompConnection con= new StompConnection(); 
      con.open("localhost", 61618); 
      con.connect("admin", "admin123"); 
      con.subscribe("/queue/test1", Subscribe.AckModeValues.CLIENT); 
      con.begin("a2"); 
      StompFrame mes = con.receive(); 
      System.out.println(mes.getBody()); 
      con.ack(message, "a2"); 
      con.commit("a2");    
      con.disconnect(); 
     } 


    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

我有服務器上的3個消息。但是,我只能在客戶端每次獲得1條消息。如何在運行中獲取隊列中的所有消息?任何人都可以幫助我?

+0

PSA:是不應該的「Java」在ALLCAPS寫入。這不是一個縮寫。 – millimoose

回答

0

不能完全確定你在這裏嘗試什麼,但閱讀這三個只是一個簡單的循環,如:

con.begin("a2"); 
    while (true) { 
     StompFrame message = null; 
     try { 
      message = connection.receive(5000); 
     } catch (Exception e) { 
      break; 
     } 
     System.out.println(mes.getBody()); 
     con.ack(message, "a2"); 
    } 
    connection.commit("a2");     
+0

非常感謝。這很簡單,我怎麼也弄不清楚〜 –

相關問題