RobertIndie opened a new issue, #399:
URL: https://github.com/apache/pulsar-client-node/issues/399

   Here is the reproduction code:
   ```js
   const Pulsar = require('pulsar-client');
   
   (async () => {
     // Create a client
     const client = new Pulsar.Client({
       serviceUrl: 'pulsar://localhost:6650'
     });
   
     // Create a producer
     const producer = await client.createProducer({
       topic: 'persistent://public/default/my-topic',
     });
     
     const sendRecords = async () => {
       // Send a message
       await producer.send({
           data: Buffer.from("hello")
       });
   
       console.log("sent hello")
       setTimeout(()=>sendRecords(), 1000)
     }
   
     
     await sendRecords();
   })();
   ```
   
   The output would be like:
   ```
   ➜  node node index.js
   sent hello
   sent hello
   sent hello
   sent hello
   sent hello
   sent hello
   sent hello
   node:internal/process/promises:288
               triggerUncaughtException(err, true /* fromPromise */);
               ^
   
   [Error: Failed to send message: AlreadyClosed]
   
   Node.js v18.19.0
   ```
   After the client exits the outer function's scope, it will eventually be 
garbage collected. This closes the producers and causes the AlreadyClosed issue.
   
   A workaround is to pass the client ref to the sendRecords function:
   ```js
     const sendRecords = async (client) => {
       // Send a message
       await producer.send({
           data: Buffer.from("hello")
       });
   
       console.log("sent hello")
       setTimeout(()=>sendRecords(client), 1000)
     }
   
     
     await sendRecords(client);
   ```
   
   And it works.
   
   A better approach is to keep a reference to the client inside the producer 
or consumer. This way, as long as we hold a reference to the producer or 
consumer, the client object will not be garbage collected.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to