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 >