[refactor] optimize ci and build form source code. (#280)

### Motivation

When building by source code on a Linux system,  If the CPP client is present locally, the installation CPP client may fail.

### Modifications

- Install the CPP client to a tmp path, not a system path.  In this way, even if the CPP client exists locally, it does not affect each other.
- Add README to explain that build from source code requires Node.js version greater than 16.18.
- Optimize file structure.
10 files changed
tree: 489335700da74a4c3006d1aa4950947dab08ae80
  1. .github/
  2. build-support/
  3. docs/
  4. examples/
  5. perf/
  6. pkg/
  7. src/
  8. tests/
  9. .asf.yaml
  10. .clang-format
  11. .eslintignore
  12. .eslintrc.json
  13. .gitignore
  14. binding.gyp
  15. dependencies.yaml
  16. Gruntfile.js
  17. index.d.ts
  18. index.js
  19. LICENSE
  20. license-header.txt
  21. package-lock.json
  22. package.json
  23. pulsar-client-cpp.txt
  24. README.md
  25. tsconfig.json
  26. tslint.json
  27. tstest.ts
README.md

Pulsar Node.js client library

The Pulsar Node.js client can be used to create Pulsar producers and consumers in Node.js.

This library works only in Node.js 10.x or later because it uses the node-addon-api module to wrap the C++ library.

Getting Started

Note

These instructions are only available for versions after 1.8.0. For versions previous to 1.8.0, you need to install the C++ client first. Please switch to the corresponding version branch of this repo to read the specific instructions.

To run the examples, skip this section.

To use the Pulsar Node.js client in your project, run:

npm install pulsar-client

or

yarn add pulsar-client

Then you can run the following simple end-to-end example:

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',
  });

  // Create a consumer
  const consumer = await client.subscribe({
    topic: 'persistent://public/default/my-topic',
    subscription: 'sub1'
  });

  // Send a message
  producer.send({
    data: Buffer.from("hello")
  });

  // Receive the message 
  const msg = await consumer.receive();
  console.log(msg.getData().toString());
  consumer.acknowledge(msg);

  await producer.close();
  await consumer.close();
  await client.close();
})();

You should find the output as:

hello

You can see more examples in the examples directory. However, since these examples might use an API that was not released yet, you need to build this module. See the next section.

How to build

Note

Build from source code requires the Node.js version greater than 16.18

First, clone the repository.

git clone https://github.com/apache/pulsar-client-node.git
cd pulsar-client-node

Since this client is a C++ addon that depends on the Pulsar C++ client, you need to install the C++ client first. You need to ensure there is a C++ compiler that supports C++11 installed in your system.

  • Install C++ client on Linux:
pkg/linux/download-cpp-client.sh
  • Install C++ client on Windows:
pkg\windows\download-cpp-client.bat
  • Install C++ client on macOS:
pkg/mac/build-cpp-deps-lib.sh
pkg/mac/build-cpp-lib.sh

After the C++ client is installed, run the following command to build this C++ addon.

npm install

To verify it has been installed successfully, you can run an example like:

node examples/producer

You should find the output as:

Sent message: my-message-0
Sent message: my-message-1
Sent message: my-message-2
Sent message: my-message-3
Sent message: my-message-4
Sent message: my-message-5
Sent message: my-message-6
Sent message: my-message-7
Sent message: my-message-8
Sent message: my-message-9

Documentation