The Pulsar C++ client

Supported platforms

The Pulsar C++ client has been successfully tested on MacOS and Linux.

Linux

Install

Since the 2.1.0 release, Pulsar ships pre-built RPM and Debian packages. You can choose to downloadand install those packages instead of building them yourself.

RPM

LinkCrypto files
clientasc, sha512
client-debuginfoasc, sha512
client-develasc, sha512

To install a RPM package, download the RPM packages and install them using the following command:

  1. $ rpm -ivh apache-pulsar-client*.rpm

DEB

LinkCrypto files
clientasc, sha512
client-develasc, sha512

To install a DEB package, download the DEB packages and install them using the following command:

  1. $ apt install ./apache-pulsar-client*.deb

Build

If you want to build RPM and Debian packages off latest master, you can follow the instructionsbelow to do so. All the instructions are run at the root directory of your cloned Pulsarrepo.

There are recipes that build RPM and Debian packages containing astatically linked libpulsar.so / libpulsar.a with all the requireddependencies.

To build the C++ library packages, first build the Java packages:

  1. mvn install -DskipTests

RPM

  1. pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh

This will build the RPM inside a Docker container and it will leave the RPMsin pulsar-client-cpp/pkg/rpm/RPMS/x86_64/.

Package nameContent
pulsar-clientShared library libpulsar.so
pulsar-client-develStatic library libpulsar.a and C++ and C headers
pulsar-client-debuginfoDebug symbols for libpulsar.so

Deb

To build Debian packages:

  1. pulsar-client-cpp/pkg/deb/docker-build-deb.sh

Debian packages will be created at pulsar-client-cpp/pkg/deb/BUILD/DEB/

Package nameContent
pulsar-clientShared library libpulsar.so
pulsar-client-devStatic library libpulsar.a and C++ and C headers

MacOS

Pulsar releases are available through the Homebrew core repository. You can install the C++ clientlibrary with:

  1. brew install libpulsar

This will install the package with the library and headers.

Connection URLs

To connect to Pulsar using client libraries, you need to specify a Pulsar protocol URL.

Pulsar protocol URLs are assigned to specific clusters, use the pulsar URI scheme and have a default port of 6650. Here’s an example for localhost:

  1. pulsar://localhost:6650

A URL for a production Pulsar cluster may look something like this:

  1. pulsar://pulsar.us-west.example.com:6650

If you’re using TLS authentication, the URL will look like something like this:

  1. pulsar+ssl://pulsar.us-west.example.com:6651

Consumer

  1. Client client("pulsar://localhost:6650");
  2. Consumer consumer;
  3. Result result = client.subscribe("my-topic", "my-subscribtion-name", consumer);
  4. if (result != ResultOk) {
  5. LOG_ERROR("Failed to subscribe: " << result);
  6. return -1;
  7. }
  8. Message msg;
  9. while (true) {
  10. consumer.receive(msg);
  11. LOG_INFO("Received: " << msg
  12. << " with payload '" << msg.getDataAsString() << "'");
  13. consumer.acknowledge(msg);
  14. }
  15. client.close();

Producer

  1. Client client("pulsar://localhost:6650");
  2. Producer producer;
  3. Result result = client.createProducer("my-topic", producer);
  4. if (result != ResultOk) {
  5. LOG_ERROR("Error creating producer: " << result);
  6. return -1;
  7. }
  8. // Publish 10 messages to the topic
  9. for (int i = 0; i < 10; i++){
  10. Message msg = MessageBuilder().setContent("my-message").build();
  11. Result res = producer.send(msg);
  12. LOG_INFO("Message sent: " << res);
  13. }
  14. client.close();

Authentication

  1. ClientConfiguration config = ClientConfiguration();
  2. config.setUseTls(true);
  3. config.setTlsTrustCertsFilePath("/path/to/cacert.pem");
  4. config.setTlsAllowInsecureConnection(false);
  5. config.setAuth(pulsar::AuthTls::create(
  6. "/path/to/client-cert.pem", "/path/to/client-key.pem"););
  7. Client client("pulsar+ssl://my-broker.com:6651", config);