activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From spamtrap <nospam.1.friedbad...@spamgourmet.com>
Subject Re: Allowing another consumer to have a message (ActiveMQ-CPP)
Date Thu, 11 Jun 2015 08:48:07 GMT
On Wed, 10 Jun 2015 12:32:00 -0400, Christopher Shannon
<christopher.l.shannon@gmail.com> wrote:

OK.  I've tried this.  However when I create the new consumer object,
nothing is consumed and I notice that there are no messages in the
queue to consume.

Any ideas why this is happening?

>Yes you should create a new consumer object.  You can certainly reuse
>connections and sessions but you will want to call createConsumer() on the
>session to get a new consumer if you close the old one.  If you create a
>new consumer the you should start receiving messages again.
>
>On Wed, Jun 10, 2015 at 6:44 AM, spam trap <
>nospam.1.friedbadger@spamgourmet.com> wrote:
>
>> On Tue, 9 Jun 2015 10:31:02 -0400, Christopher Shannon
>> <christopher.l.shannon@gmail.com> wrote:
>>
>> OK.  Thanks.
>>
>> Now I am looking at the case where we want messages to be redelivered
>> to the same consumer (assume there is only one consumer of a queue). I
>> have tried stopping and restarting the session and consumer objects
>> but not all messages are redelivered.
>>
>> The following article seems to suggest that you must close the
>> consumer object
>> (http://activemq.apache.org/what-is-the-prefetch-limit-for.html)
>> but if I try this and then attempt to restart it, no messages are
>> consumed at all, even new ones.
>>
>> How can I achieve the latter?  Do I need to destroy and recreate the
>> consumer object, for example?
>>
>> >I think the only way you are going to be able to achieve what you want is
>> >by doing what Tim mentioned....using a transaction where you
>> >commit/rollback after each message.  Since processing a message could take
>> >a while, you could increase the number of consumers to increase
>> throughput.
>> >
>> >
>> >Take a look at the documentation here:
>> >http://activemq.apache.org/message-redelivery-and-dlq-handling.html for
>> >more info on how messages can be redelivered.
>> >
>> >On Tue, Jun 9, 2015 at 9:51 AM, spamtrap <
>> >nospam.1.friedbadger@spamgourmet.com> wrote:
>> >
>> >> On Tue, 9 Jun 2015 07:29:16 -0600, Tim Bain
>> >> <tbain@alumni.duke.edu> wrote:
>> >>
>> >> >So why can't you use transactions?  Won't you get what you want if you
>> >> >commit the transaction after every successful message and
>> >> >rollback()/close() and then reconnect after every failed one?
>> >>
>> >> No.  It may take some time to process a message so we operate a
>> >> 'window'.  Therefore there would normally be more than one message
>> >> outstanding.
>> >>
>> >> >Also is the app server going to fail to respond to *certain* messages,
>> or
>> >> >is it going to fail to respond to *any* messages?  If the latter, you
>> can
>> >> >delay the reconnect till you figure out that the web service is
>> available
>> >> >again.
>> >>
>> >> We have to assume it may fail to respond to certain messages.
>> >>
>> >> >On Tue, Jun 9, 2015 at 7:09 AM, spamtrap <
>> >> >nospam.1.friedbadger@spamgourmet.com> wrote:
>> >> >
>> >> >> On Tue, 9 Jun 2015 06:43:45 -0600, Tim Bain
>> >> >> <tbain@alumni.duke.edu> wrote:
>> >> >>
>> >> >> The situation is that the consumer gets a message from a queue
and
>> >> >> then converts into into a different format and sends it to an
>> >> >> application server, which should respond with an acknowledgement
>> >> >> message.  If the application server does not respond to a particular
>> >> >> message then we want to be able to allow another ActiveMQ consumer
to
>> >> >> pick up the message and send it elsewhere.  Any consumer should
be
>> >> >> able to process the message so we don't want to use selectors.
>> >> >>
>> >> >> >In this scenario, do you want to consume it twice, or do you
really
>> >> want
>> >> >> to
>> >> >> >consume it once but you're picking which consumer gets it?
 If the
>> >> latter,
>> >> >> >can you use selectors to make sure the right consumer gets
the right
>> >> >> >messages?  Or maybe an embedded Camel route to send those messages
>> to a
>> >> >> >queue that's specific to the consumer that should get them?
>> >> >> >On Jun 9, 2015 6:00 AM, "spamtrap" <
>> >> nospam.1.friedbadger@spamgourmet.com>
>> >> >> >wrote:
>> >> >> >
>> >> >> >> On Tue, 9 Jun 2015 07:24:24 -0400, Christopher Shannon
>> >> >> >> <christopher.l.shannon@gmail.com> wrote:
>> >> >> >>
>> >> >> >> >The use case you are trying to achieve is probably
best done by
>> >> using a
>> >> >> >> >transaction instead of individual acknowledgements.
 If you call
>> >> >> rollback
>> >> >> >> >on the session then the message would be available
to be
>> >> redelivered to
>> >> >> >> >another consumer.
>> >> >> >>
>> >> >> >> I don't think I can use a transaction because all messages
are
>> >> >> >> committed at once.  We need to be able to select which
messages
>> may
>> >> be
>> >> >> >> redelivered and which not, hence the individual acknowledge
mode
>> is
>> >> >> >> used.
>> >> >> >>
>> >> >> >> Will the rollback work with individual acknowledgements?
>> >> >> >>
>> >> >> >>
>> >> >> >> >
>> >> >> >> >On Tue, Jun 9, 2015 at 3:50 AM, spamtrap <
>> >> >> >> >nospam.1.friedbadger@spamgourmet.com> wrote:
>> >> >> >> >
>> >> >> >> >> Hi,
>> >> >> >> >>
>> >> >> >> >> In some cases we want to allow another consumer
to consumer a
>> >> message
>> >> >> >> >> that has already been consumed.   The session
is opened using
>> >> >> >> >> INDIVIDUAL_ACKNOWLEDGE and the message has not
been
>> >> acknowledged.  I
>> >> >> >> >> have tried closing the session where the message
has been
>> consumed
>> >> >> but
>> >> >> >> >> the message is not available to the other consumer.
 How can I
>> >> >> achieve
>> >> >> >> >> what I need?
>> >> >> >> >>
>> >> >> >> >> TIA.
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>



Mime
View raw message