On Tue, 9 Jun 2015 10:31:02 -0400, Christopher Shannon
<christopher.l.shan...@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.friedbad...@spamgourmet.com> wrote:
>
>> On Tue, 9 Jun 2015 07:29:16 -0600, Tim Bain
>> <tb...@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.friedbad...@spamgourmet.com> wrote:
>> >
>> >> On Tue, 9 Jun 2015 06:43:45 -0600, Tim Bain
>> >> <tb...@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.friedbad...@spamgourmet.com>
>> >> >wrote:
>> >> >
>> >> >> On Tue, 9 Jun 2015 07:24:24 -0400, Christopher Shannon
>> >> >> <christopher.l.shan...@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.friedbad...@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.
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>

Reply via email to