Supported platforms

Pulsar C ++客户端已在MacOS和Linux上成功测试。

Linux

安装

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

RPM

链接加密文件
clientasc, sha512
client-debuginfoasc, sha512
client-develasc, sha512

安装RPM包的命令如下所示:

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

DEB

链接加密文件
clientasc, sha512
client-develasc, sha512

你可以使用如下命令来下载并安装DEB包:

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

编译

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

你可以通过下面的方式来编译包含libpulsar.so / libpulsar.a静态库以及所有必要依赖的二进制包。

请先编译Java库,然后再编译C++库。

  1. mvn install -DskipTests

RPM

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

上面的命令将会在Docker中编译RPM包并且在pulsar-client-cpp/pkg/rpm/RPMS/x86_64/.生成你需要的那些RPM包。

包名内容
pulsar-clientlibpulsar.so共享库
pulsar-client-devel静态库 libpulsar.a 以及 C++ 和 C 头文件
pulsar-client-debuginfoDebug symbols for libpulsar.so

Deb

如果需要编译Debian包:

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

编译好的DEB包会被保存在文件夹 pulsar-client-cpp/pkg/deb/BUILD/DEB/

包名内容
pulsar-clientlibpulsar.so共享库
pulsar-client-dev静态库 libpulsar.a 以及 C++ 和 C 头文件

MacOS

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

  1. brew install libpulsar

This will install the package with the library and headers.

连接URL

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);