2013-10-30 44 views
0

所以我有一个发送者(在本例中)发送3个xml格式的对象给接收者,但是我的stringbuilder首先打印出第一个对象,然后是第一个+第二个,然后是所有3个而不是: - 打印出第一 - 打印第二 - 打印第三ActiveMQ中的Stringbuilder

这是我的代码:

public class TrackingSender { 
public static void main(String[] args) { 
    try { 
     ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 

     Connection connection = connectionFactory.createConnection(); 
     connection.start(); 

     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

     Destination destination = session.createQueue("TEST.SENDRECEIVE"); 

     MessageProducer producer = session.createProducer(destination); 
     producer.setDeliveryMode(DeliveryMode.PERSISTENT); 
     TrackingInformatieFactory.makeTrackingInformatieList(); 
     List<TrackingInformatie> trackingInformatieList = TrackingInformatieFactory.getTrackingInformatieList(); 
     Writer writer = new StringWriter(); 
     TextMessage message; 
     for(TrackingInformatie ti: trackingInformatieList){ 
      Marshaller.marshal(ti, writer); 
      message = session.createTextMessage(writer.toString()); 
      producer.send(message); 
      Thread.sleep(1000); 
     } 

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

} 

public class TrackingReceiver { 
public static void main(String[] args) { 
    try { 
     ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 

     Connection connection = connectionFactory.createConnection(); 
     connection.start(); 

     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     Destination destination = session.createQueue("TEST.SENDRECEIVE"); 
     MessageConsumer consumer = session.createConsumer(destination); 
     TextMessage message; 
     Reader reader; 
     StringBuilder builder; 
     int charsRead; 
     char[] chars; 
     TrackingInformatieFactory.makeTrackingInformatieList(); 
     List<TrackingInformatie> trackingInformatieList = TrackingInformatieFactory.getTrackingInformatieList(); 
     for (int i = 0; i < trackingInformatieList.size(); i++){ 
      message = (TextMessage) consumer.receive(); 
      reader = new StringReader(message.getText()); 
      builder = new StringBuilder(); 
      chars = new char[100]; 
      charsRead = -1; 
     do{ 
      charsRead = reader.read(chars,0,chars.length); 
      //if we have valid chars, append them to end of string. 
      if(charsRead>0) 
       builder.append(chars,0,charsRead); 
     } 
     while(charsRead>0); 
      String stringReadFromReader = builder.toString(); 
      System.out.println("String read = " + stringReadFromReader); 

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

回答

1

在你的制片人,你永远不会重新初始化您的作家。因此,您发送的消息实际上包含第一个对象,第一个和第二个对象,然后是全部三个。改变你的生产者代码来初始化for循环中的StringWriter,而不是在它之前。

+0

谢谢!你是对的 –