You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by mvhoof <mv...@tp2net.com> on 2009/05/27 12:20:12 UTC

Producer Acknowledge in NMS ?

Hi,

I have a requirement to built a message queue Consumer/producer which works
on flaky connections. Now this consumer/producer could be rebooted at all
times (we have no control over this). So my challenge is this:


Simply sending the Message using a MessageProducer, i know when a message is
actually sent, however, this could block the application if the connection
is down AND, if the machine is rebooted, i could loose the messages .

Using RequestTimeOut, i could bypass the locking issue, however.. how can i
find out if a message has been sent or not ? I've read just about everything
i could find on ActiveMQ and NMS but this does not show up anywhere ? For
building a trusty system, i really need to know if the message has been sent
and if not, i can cache it locally until connection is restored.

Secondly, is there any way to monitor the connection with the broker using
NMS (we are using the failover protocol) so i can retry sending the chached
messages as soon as connection is up again ?

Many thanks in advance !
-- 
View this message in context: http://www.nabble.com/Producer-Acknowledge-in-NMS---tp23739749p23739749.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Producer Acknowledge in NMS ?

Posted by mvhoof <mv...@tp2net.com>.


Timothy Bish wrote:
> 
> On Wed, 2009-05-27 at 08:06 -0700, mvhoof wrote:
>> 
>> 
>> Timothy Bish wrote:
>> > 
>> > On Wed, 2009-05-27 at 03:20 -0700, mvhoof wrote:
>> >> Hi,
>> >> 
>> >> I have a requirement to built a message queue Consumer/producer which
>> >> works
>> >> on flaky connections. Now this consumer/producer could be rebooted at
>> all
>> >> times (we have no control over this). So my challenge is this:
>> >> 
>> >> 
>> >> Simply sending the Message using a MessageProducer, i know when a
>> message
>> >> is
>> >> actually sent, however, this could block the application if the
>> >> connection
>> >> is down AND, if the machine is rebooted, i could loose the messages .
>> >> 
>> >> Using RequestTimeOut, i could bypass the locking issue, however.. how
>> can
>> >> i
>> >> find out if a message has been sent or not ? I've read just about
>> >> everything
>> >> i could find on ActiveMQ and NMS but this does not show up anywhere ?
>> For
>> >> building a trusty system, i really need to know if the message has
>> been
>> >> sent
>> >> and if not, i can cache it locally until connection is restored.
>> >> 
>> >> Secondly, is there any way to monitor the connection with the broker
>> >> using
>> >> NMS (we are using the failover protocol) so i can retry sending the
>> >> chached
>> >> messages as soon as connection is up again ?
>> >> 
>> >> Many thanks in advance !
>> > 
>> > If you are disabling the blocking sends then there really isn't a way
>> to
>> > check that its been sent.  The blocking send is waiting for
>> > acknowledgment from the broker that it received the message if you use
>> > async sends or use the request timeout option then you give up the
>> > reliability built into the send mechanism.
>> > 
>> > Regards
>> > Tim.
>> > 
>> > 
>> > -- 
>> > Tim Bish
>> > http://fusesource.com
>> > http://timbish.blogspot.com/
>> > 
>> > 
>> > 
>> > 
>> > 
>> Hmm.. ok.. thanks for the answer. 
>> 
>> So i can only try to mimic this by controlling the connection myself
>> instead
>> of using the failover protocol and then try to send the message only if a
>> connection can be made right ?
> 
> When you send a message when using the Failover transport the Message
> will be sent if the client is currently disconnected and later
> reconnects or if the connection is lost mid send.  If the blocking
> nature of the send call is unacceptable then you could of course
> relegate your sends to a separate thread.  Depends on the problem you
> are trying to solve.
> 
> Regards
> Tim.
> 
> 
> -- 
> Tim Bish
> http://fusesource.com
> http://timbish.blogspot.com/
> 
> 
> 
> 
> 


Unfortunalty.. my problem is mainly situated between the keyboard and a
chair, being a user that could reboots it's "producer" any time so i would
need local caching and/or checking
-- 
View this message in context: http://www.nabble.com/Producer-Acknowledge-in-NMS---tp23739749p23744724.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Producer Acknowledge in NMS ?

Posted by Timothy Bish <ta...@gmail.com>.
On Wed, 2009-05-27 at 08:06 -0700, mvhoof wrote:
> 
> 
> Timothy Bish wrote:
> > 
> > On Wed, 2009-05-27 at 03:20 -0700, mvhoof wrote:
> >> Hi,
> >> 
> >> I have a requirement to built a message queue Consumer/producer which
> >> works
> >> on flaky connections. Now this consumer/producer could be rebooted at all
> >> times (we have no control over this). So my challenge is this:
> >> 
> >> 
> >> Simply sending the Message using a MessageProducer, i know when a message
> >> is
> >> actually sent, however, this could block the application if the
> >> connection
> >> is down AND, if the machine is rebooted, i could loose the messages .
> >> 
> >> Using RequestTimeOut, i could bypass the locking issue, however.. how can
> >> i
> >> find out if a message has been sent or not ? I've read just about
> >> everything
> >> i could find on ActiveMQ and NMS but this does not show up anywhere ? For
> >> building a trusty system, i really need to know if the message has been
> >> sent
> >> and if not, i can cache it locally until connection is restored.
> >> 
> >> Secondly, is there any way to monitor the connection with the broker
> >> using
> >> NMS (we are using the failover protocol) so i can retry sending the
> >> chached
> >> messages as soon as connection is up again ?
> >> 
> >> Many thanks in advance !
> > 
> > If you are disabling the blocking sends then there really isn't a way to
> > check that its been sent.  The blocking send is waiting for
> > acknowledgment from the broker that it received the message if you use
> > async sends or use the request timeout option then you give up the
> > reliability built into the send mechanism.
> > 
> > Regards
> > Tim.
> > 
> > 
> > -- 
> > Tim Bish
> > http://fusesource.com
> > http://timbish.blogspot.com/
> > 
> > 
> > 
> > 
> > 
> Hmm.. ok.. thanks for the answer. 
> 
> So i can only try to mimic this by controlling the connection myself instead
> of using the failover protocol and then try to send the message only if a
> connection can be made right ?

When you send a message when using the Failover transport the Message
will be sent if the client is currently disconnected and later
reconnects or if the connection is lost mid send.  If the blocking
nature of the send call is unacceptable then you could of course
relegate your sends to a separate thread.  Depends on the problem you
are trying to solve.

Regards
Tim.


-- 
Tim Bish
http://fusesource.com
http://timbish.blogspot.com/




Re: Producer Acknowledge in NMS ?

Posted by mvhoof <mv...@tp2net.com>.


Timothy Bish wrote:
> 
> On Wed, 2009-05-27 at 03:20 -0700, mvhoof wrote:
>> Hi,
>> 
>> I have a requirement to built a message queue Consumer/producer which
>> works
>> on flaky connections. Now this consumer/producer could be rebooted at all
>> times (we have no control over this). So my challenge is this:
>> 
>> 
>> Simply sending the Message using a MessageProducer, i know when a message
>> is
>> actually sent, however, this could block the application if the
>> connection
>> is down AND, if the machine is rebooted, i could loose the messages .
>> 
>> Using RequestTimeOut, i could bypass the locking issue, however.. how can
>> i
>> find out if a message has been sent or not ? I've read just about
>> everything
>> i could find on ActiveMQ and NMS but this does not show up anywhere ? For
>> building a trusty system, i really need to know if the message has been
>> sent
>> and if not, i can cache it locally until connection is restored.
>> 
>> Secondly, is there any way to monitor the connection with the broker
>> using
>> NMS (we are using the failover protocol) so i can retry sending the
>> chached
>> messages as soon as connection is up again ?
>> 
>> Many thanks in advance !
> 
> If you are disabling the blocking sends then there really isn't a way to
> check that its been sent.  The blocking send is waiting for
> acknowledgment from the broker that it received the message if you use
> async sends or use the request timeout option then you give up the
> reliability built into the send mechanism.
> 
> Regards
> Tim.
> 
> 
> -- 
> Tim Bish
> http://fusesource.com
> http://timbish.blogspot.com/
> 
> 
> 
> 
> 
Hmm.. ok.. thanks for the answer. 

So i can only try to mimic this by controlling the connection myself instead
of using the failover protocol and then try to send the message only if a
connection can be made right ?
-- 
View this message in context: http://www.nabble.com/Producer-Acknowledge-in-NMS---tp23739749p23744440.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Producer Acknowledge in NMS ?

Posted by Timothy Bish <ta...@gmail.com>.
On Wed, 2009-05-27 at 03:20 -0700, mvhoof wrote:
> Hi,
> 
> I have a requirement to built a message queue Consumer/producer which works
> on flaky connections. Now this consumer/producer could be rebooted at all
> times (we have no control over this). So my challenge is this:
> 
> 
> Simply sending the Message using a MessageProducer, i know when a message is
> actually sent, however, this could block the application if the connection
> is down AND, if the machine is rebooted, i could loose the messages .
> 
> Using RequestTimeOut, i could bypass the locking issue, however.. how can i
> find out if a message has been sent or not ? I've read just about everything
> i could find on ActiveMQ and NMS but this does not show up anywhere ? For
> building a trusty system, i really need to know if the message has been sent
> and if not, i can cache it locally until connection is restored.
> 
> Secondly, is there any way to monitor the connection with the broker using
> NMS (we are using the failover protocol) so i can retry sending the chached
> messages as soon as connection is up again ?
> 
> Many thanks in advance !

If you are disabling the blocking sends then there really isn't a way to
check that its been sent.  The blocking send is waiting for
acknowledgment from the broker that it received the message if you use
async sends or use the request timeout option then you give up the
reliability built into the send mechanism.

Regards
Tim.


-- 
Tim Bish
http://fusesource.com
http://timbish.blogspot.com/