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