activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Mittler" <nathan.mitt...@gmail.com>
Subject Re: Message's live time
Date Wed, 29 Nov 2006 11:30:16 GMT
1) In the producer code, you should be setting the TimeToLive (the line you
have commented out), not the Expiration in the message directly.  TTL =
currentTime + 1000, for example.  Remember, this is just a temporary
work-around, in the future it will be TTL = 1000, which will match the JMS
API.  Expiration is a field in the message that is set by the JMS provider.
When you send a message, the MessageProducer will overwrite your value for
Expiration with what it thinks it should be (currently the time to live
value).
2) Since you're using an asynchronous consumer your onMessage method will be
called back asynchronously ... as soon as the message is received on the
wire.  I think the best bet would be to use the current time as your
TimeToLive (TTL) value.  The odds of your message being sent to the broker,
processed, and then sent back to the consumer in a single millisecond are
pretty small.  If you still receive the message, it may be an issue with the
broker.

On 11/29/06, sgliu <shengguo@sina.com> wrote:
>
>
> In Producer,follow code:
>
> ...
> #include <sys/timeb.h>
> unsigned long getcurt()
> {
>         struct timeb t;
>         ftime (&t);
>         unsigned long timeStamp = (t.time * 1000LL) + t.millitm;
>         return timeStamp;
> }
> ...
> destination = session->createTopic( "mytopic" );
> producer = session->createProducer( destination );
> producer->setDeliveryMode( DeliveryMode::PERSISTANT );
> ...
> unsigned long ttt=getcurt();
> message->setCMSTimeStamp(ttt);
> message->setCMSExpiration(ttt + 10000);
> //producer->setTimeToLive(10000);
> producer->send( message );
> ...
>
> In Consumer ,follow code:
> ...
> ... ...
>     virtual void run() {
>
>         try {
>
>                         string user,passwd,sID;
>                         user="default";
>                         passwd="";
>                         sID="lsgID";
>             // Create a ConnectionFactory
>             ActiveMQConnectionFactory* connectionFactory =
>                 new ActiveMQConnectionFactory(
> "tcp://localhost:61613",user,passwd,sID);
>
>             // Create a Connection
>             connection =
> connectionFactory->createConnection();//user,passwd,sID);
>             delete connectionFactory;
>             connection->start();
>
>             connection->setExceptionListener(this);
>             session = connection->createSession( Session::AUTO_ACKNOWLEDGE
> );
>                         destination = session->createTopic(
> "mytopic?consumer.retroactive=true"
> );
>
>                         consumer = session->createDurableConsumer(
> destination , user ,
> "",false);
>
>             consumer->setMessageListener( this );
>             Thread::sleep( waitMillis );
>
>         } catch (CMSException& e) {
>             e.printStackTrace();
>         }
>     }
>
>     virtual void onMessage( const Message* message ){
>
>         try
>         {
>             const TextMessage* textMessage =
>                 dynamic_cast< const TextMessage* >( message );
>             string text = textMessage->getText();
>             printf( "Received: %s\n", text.c_str() );
>         } catch (CMSException& e) {
>             e.printStackTrace();
>         }
>     }
>
>     virtual void onException( const CMSException& ex ) {
>         printf("JMS Exception occured.  Shutting down client.\n");
>     }
> ... ...
>
> I hope:
> send first,a few time later,I receive nothing.
> (a few time later,message will disappear itself.)
>
> (I use visual C++ 2005)
> Please help me.
>
>
>
> I guess I'm not sure exactly what you're trying to do.  I don't see a
> consumer in the code snippets.  Is your consumer a C++ or Java client?
> Are you using an asynchronous consumer through the MessageListener
> interface, or are you calling receive() after a timed wait?
>
> --
> View this message in context:
> http://www.nabble.com/Message%27s-live-time-tf2706004.html#a7597066
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message