apache / pulsar-client-node

Apache Pulsar NodeJS Client
https://pulsar.apache.org/
Apache License 2.0
148 stars 86 forks source link

Waiting for ack #359

Open taefed opened 11 months ago

taefed commented 11 months ago

I'm trying to consume 1 message at a time, and i'm acknowledging the message outside of the listener. But it's just grabbing the next message without waiting for the ack.

code sample:

let msg;
let msgConsumer;

const consumer = client.subscribe({
                    topic: `persistent://public/default/test1`,
                    subscription: `sub1`,
                    subscriptionType: 'Exclusive',
                    receiverQueueSize:0,
                    ackTimeoutMs:300000,
                    listener: (msg,msgConsumer) => {
                        console.log(msg.getData().toString());
                        msg = msg;
                        msgConsumer = msgConsumer;

                    }
                  });

function someWhereElse(){

    msgConsumer.acknowledge(msg);

}

Is something like this possible?

kimula commented 11 months ago

Since listener is used for asynchronous message processing, it doesn't seem to meet your requirement (1 message at a time).

const consumer = client.subscribe( /* without listener */ );

async function somewhereElse() {
  const msg = await consumer.receive();
  consumer.acknowledge(msg);
}
taefed commented 11 months ago

Thanks a lot for the response.

I'm not receiving in the same place I'm acknowledging. I'm trying to find a way to make 1 process add jobs to queues, and acknowledge them, and the other process needs to just process 1 at a time and wait for acknowledgement.

  1. process 1 adds a message to the queue.
  2. process 2 starts processing message
  3. process 1 acknowledges message
  4. process 2 can receive next message

if a second message gets added to the queue, it has to wait for the first message to be acknowledged, I haven't found a way to make this work with the manual receive(). But I'm new to queueing so maybe I'm looking over something.

equanz commented 10 months ago

I'm trying to find a way to make 1 process add jobs to queues, and acknowledge them, and the other process needs to just process 1 at a time and wait for acknowledgement.

It seems we can't implement it with only the functionality of pulsar-client.