Вопрос

So I have a sender who sends (in this example) 3 xml-formatted objects to a receiver, however my stringbuilder is first printing out the first object, then the first + the second, then all 3 of them, instead of: - Print out first - Print out second - Print out third

This is my code:

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();
    }
}
} 
Это было полезно?

Решение

In your producer, you never re-initialize your writer. So the messages you send actually contain the first object, the first and second object and then all three. Change your producer code to initialize the StringWriter inside the for loop instead of before it.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top