tree c736d9e9d0d49b9e19b2c22bbe01dbfe13923953
parent 225d85da22485ed493f17edd6b13e4df2d47dbad
author Yosi Attias <yosy101@gmail.com> 1585189533 +0200
committer GitHub <noreply@github.com> 1585189533 +0900
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJefBKdCRBK7hj4Ov3rIwAAdHIIAE4n9483pzKJ0ZPWvOuZmLL9
 khz5emf/ikBFVWKoXyhjfLxuBjAtG43ahFhmQQ+Gg980t4+2dAgwqhHQE293/f8v
 Ta3+Tqey+zfLsteu3Zx566uKlUl32IFbErdQTYFgA+80YV++i0HY1urAzDBK5/rZ
 hMyQ3gKGz6yV0Evu3pt4I5+FuX2BBFLy9Wg5R7I/5SakH5whWyHxYVboV+cq6wTF
 CkCpgg2QwMq6/prNoihSFBtZt6FNIWJMpb1zBRfF2sopu9P0gL4LCKi2v7iYSgUR
 8G/QUu8SDWmJ024hFkUDA9e2oM1o9Udk5hOD02z/XbLTvV44n8KFqcjqzA+r8xU=
 =T/ZR
 -----END PGP SIGNATURE-----
 

Create reference for client (#85)

Since we don’t have reference for the client, v8 can garbage collect this instance, which can cause the next code:

```
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',
    sendTimeoutMs: 30000,
    batchingEnabled: true,
  });

  let i =0;
  async function produceMessage() {
    i = i + 1;

    const msg = `my-message-${i}`;
    const ret = await producer.send({
      data: Buffer.from(msg),
    });
    console.log(`Sent message: ${msg}`);
    console.log(ret);

    setTimeout(produceMessage, 1000);
  }

  produceMessage();
})();
```

To close the connection suddenly and fail the producer.