On 12/8/06, Bish, Tim <[EMAIL PROTECTED]> wrote:
AFAIK the activemq-cpp message do properly send the persistant flag. Can you create a small test app that demonstrates to problem?
yes. my test code is just a copy of main.cpp from the example. run method looks like: virtual void run() { try { // Open test message file FILE *fd; if ( (fd = fopen(messageFile.c_str(), "r")) == NULL) { cout<<"Error: Can't open file: "<<messageFile<<endl; return; } ActiveMQConnectionFactory* connectionFactory = new ActiveMQConnectionFactory("tcp://10.111.53.230:22222"); // Create a Connection connection = connectionFactory->createConnection(); connection->start(); // Create a Session session = connection->createSession( Session::AUTO_ACKNOWLEDGE ); // Create the destination (Topic or Queue) destination = session->createQueue( "TEST.FOO" ); // Create a MessageProducer from the Session to the Topic or Queue producer = session->createProducer( destination ); producer->setDeliveryMode( DeliveryMode::PERSISTANT ); // Create the Thread Id String string threadIdStr = Integer::toString( Thread::getId() ); // Create a messages string texts = (string)"<START_PERFORM_TEST>"; string texte = (string)"<END_PERFORM_TEST>"; TextMessage* message_s = session->createTextMessage( string(texts) ); producer->send( message_s ); delete message_s; char * line = NULL; size_t len = 0; ssize_t read; for( int ix=0; ix<numMessages; ++ix ){ fseek(fd,0L,SEEK_SET); while((read = getline(&line,&len,fd)) != -1) { //TextMessage* message = session->createTextMessage( text ); TextMessage* message = session->createTextMessage( string(line) ); // Tell the producer to send the message //printf( "Sent message from thread %s\n", threadIdStr.c_str() ); producer->send( message ); delete message; } } TextMessage* message_e = session->createTextMessage( string(texte) ); producer->send( message_e ); delete message_e; if(line) free(line); }catch ( CMSException& e ) { e.printStackTrace(); } } What are the steps you are currently following in both cases? Are you
sending messages with the C++ client and they are not persistant when you restart and connect a C++ client back to the broker, or have you tried sending a message persistantly with C++ and then connecting back with a Java client to see if that gets the messages that should have been persisted?
I used the cpp code above to send some messages. And they are gone after I restart the broker. I tried to use cpp consumer to get those messages. Actually, I don't need to restart the message to see if it is consistent or not. If i send enough message to the broker, jconsole says MemoryPercentageUsed: 100. and I got this: activemq::io::SocketOutputStream::write - Resource temporarily unavailable - tid: 3085880224 FILE: activemq/network/SocketOutputStream.cpp, LINE: 85 - tid: 3085880224 FILE: activemq/connector/stomp/StompCommandWriter.cpp, LINE: 101 - tid: 3085880224 FILE: ./activemq/transport/ResponseCorrelator.h, LINE: 163 - tid: 3085880224 caught unknown exception - tid: 3085880224 FILE: activemq/connector/stomp/StompConnector.cpp, LINE: 466 - tid: 3085880224 FILE: activemq/core/ActiveMQSession.cpp, LINE: 495 - tid: 3085880224 FILE: activemq/core/ActiveMQProducer.cpp, LINE: 89 - tid: 3085880224 FILE: activemq/core/ActiveMQProducer.cpp, LINE: 71 - tid: 3085880224 caught unknown exception FILE: activemq/connector/stomp/StompConnector.cpp, LINE: 466 FILE: activemq/core/ActiveMQSession.cpp, LINE: 495 FILE: activemq/core/ActiveMQProducer.cpp, LINE: 89 FILE: activemq/core/ActiveMQProducer.cpp, LINE: 71 Thanks Regards
Tim. > -----Original Message----- > From: amq user [mailto:[EMAIL PROTECTED] > Sent: Friday, December 08, 2006 2:10 PM > To: activemq-dev > Subject: active-cpp persistent problem > > I'm struggling with persistent option in activemq-cpp client. (my java > client does the trick) > part of my code looks like: > > producer->setDeliveryMode( DeliveryMode::PERSISTANT ); > > The problem is after I send a message, and stop the broker. The message is > gone. > If I send a lot of message exceeding the memory size the broker handles, I > got resource unavailable exception. > > It looks to me the message I send over using cpp doesn't instruct the > broker > to use persistent. > I'm using ActiveMQ 4.0.2, and activemq-cpp-1.0. > > Please help. What else should I check. Did I miss anything? > Thanks