Hi Kristinn,

the prefetch limit is for consumers and the current implementation of the
activemq-client 5 automatically sends a delivery acknowledgement when the
unacknowledged messages are more than the half of the prefetch limit, so I
don't think it can help.

Regards,
Domenico

Il giorno mar 7 lug 2020 alle ore 10:11 Kristinn Thor Johannsson <
k...@skalar.no> ha scritto:

> The use case can be explained like this:
>
> We are doing some work based on git commits, and for each target (either
> commit or user defined branch name) we only want to be handling the first
> workload before starting the next.
> So we're probably going to have a high number of topics (each unique
> commit), but within each of those topics there might only be 1-3 messages
> to be handled (with the exception of the user defined branch named
> targets).
>
> So we were thinking that a mq might be able to help us do this in a
> performant way, where our consumers are only informed of messages that are
> ready and valid to start (no active workload for that specific
> commit/branch name and it's the next within that topic).
>
> I've read the doc page you linked to about prefetch limit, could I use the
> prefetch limit set to 1 for topics to achieve this?
>
> man. 6. jul. 2020 kl. 18:14 skrev Domenico Francesco Bruscino <
> bruscin...@gmail.com>:
>
> > Hi Kristinn,
> >
> > the acknowledgements confirm the successful consumption of a message to
> the
> > server and generally it doesn't control directly the flow of data between
> > the server and the client[1].
> >
> > Using the messaging group suitably, only one consumer will receive the
> > messages of a queue and if your consumer is slow you could
> > set consumerWindowSize to 0 (for no buffer at all)[2] to limit the
> > redeliveries on disconnection.
> > So using the messaging group and setting consumerWindowSize to 0, the
> > server sends all the messages of a queue to one consumer and the consumer
> > doesn't receive the next message before invoking the `receive()` method
> or
> > asynchronously via a message listener.
> >
> > If this solution doesn't match your requirements, the activemq-client 5
> > offers a way to control the delivery with the acknowledgements using
> > prefetch limit [3].
> > Why do you need to lock the delivery of the next message until
> > the acknowledgement of the previous one?
> >
> > [1]
> >
> >
> https://activemq.apache.org/components/artemis/documentation/latest/flow-control.html
> > [2]
> >
> >
> https://activemq.apache.org/components/artemis/documentation/latest/flow-control.html#slow-consumers
> > [3] https://activemq.apache.org/what-is-the-prefetch-limit-for
> >
> > Regards,
> > Domenico
> >
> > Il giorno lun 6 lug 2020 alle ore 09:50 Kristinn Thor Johannsson <
> > k...@skalar.no> ha scritto:
> >
> > > Thanks a lot for the response Domenico.
> > >
> > > I see what I failed to mention in my original question is that each
> > > consumer might need a while to process a message from each queue it's
> > > handling.
> > > In your example, you had auto-acknowledge, making each message being
> > > instantly handled by the consumer.
> > >
> > > Is your example modifiable to make it so that a message takes about 1
> > > second to be handled and acknowledged, and the consumer doesn't receive
> > the
> > > next message for the same queue before that happens?
> > > If so, I'm certain our use case can be handled by artemis.
> > >
> > >
> > > fre. 3. jul. 2020 kl. 13:02 skrev Domenico Francesco Bruscino <
> > > bruscin...@gmail.com>:
> > >
> > > > Hi Kristinn,
> > > >
> > > > I have just answered the same question on stackoverflow:
> > > >
> > > >
> > >
> >
> https://stackoverflow.com/questions/62701025/activemq-artemis-handle-messages-sequentially/62705413#62705413
> > > >
> > > > Regards,
> > > > Domenico
> > > >
> > > > Il giorno gio 18 giu 2020 alle ore 10:51 Kristinn Thor Johannsson <
> > > > k...@skalar.no> ha scritto:
> > > >
> > > > > Hi, I've tried to ensure that a consumer on a queue (with message
> > > > grouping)
> > > > > will only receive one message at a time from each queue it's
> > handling,
> > > > > until the consumer acknowledges said message.
> > > > >
> > > > > For a test I've set up ActiveMQ Artemis and have 3 consumers on a
> > > > wildcard
> > > > > EXAMPLE.* , and one publisher posting 10 messages to each of 5
> > queues:
> > > > > EXAMPLE.1 - EXAMPLE.5 . What I'm seeing is that each of the
> consumers
> > > > > receive messages from the queues immediately. I've tried using the
> > > > consumer
> > > > > window size setting (as 0) as I thought that would help me only
> > deliver
> > > > one
> > > > > message at a time from each queue, but that doesn't seem to work.
> > Have
> > > I
> > > > > misunderstood that setting? If so, are there any other settings I
> > > should
> > > > be
> > > > > looking at to help me get this working?
> > > > >
> > > > > The particular use case I'm trying to achieve is that I'll possibly
> > > have
> > > > > many queues and a couple of consumers. And it's important that
> > messages
> > > > in
> > > > > each of the queues are handled sequentially, but all queues can be
> > > > handled
> > > > > in parallell
> > > > >
> > > > > --
> > > > > -Kristinn Thor
> > > > >
> > > >
> > >
> > >
> > > --
> > > -Kristinn Thor
> > >
> >
>
>
> --
> -Kristinn Thor
>

Reply via email to