google-cloud-cpp

HOWTO: using the Cloud Pub/Sub C++ client in your project

This directory contains small examples showing how to use the Cloud Pub/Sub C++ client library in your own project. These instructions assume that you have some experience as a C++ developer and that you have a working C++ toolchain (compiler, linker, etc.) installed on your platform.

Before you Begin

To run the quickstart program you will need a working Google Cloud Platform (GCP) project, and an existing Cloud Pub/Sub Topic. The Cloud Pub/Sub quickstarts is a good place to find information on how to setup a GCP project and create a topic. Make a note of the project and topic ids as you will need them later.

Configuring authentication for the C++ Client Library

Like most Google Cloud Platform (GCP) services, Cloud Pub/Sub requires that your application authenticates with the service before accessing any data. If you are not familiar with GCP authentication please take this opportunity to review the Authentication Overview. This library uses the GOOGLE_APPLICATION_CREDENTIALS environment variable to find the credentials file. For example:

Shell Command
Bash/zsh/ksh/etc. export GOOGLE_APPLICATION_CREDENTIALS=[PATH]
sh GOOGLE_APPLICATION_CREDENTIALS=[PATH];
export GOOGLE_APPLICATION_CREDENTIALS
csh/tsch setenv GOOGLE_APPLICATION_CREDENTIALS [PATH]
Windows Powershell $env:GOOGLE_APPLICATION_CREDENTIALS=[PATH]
Windows cmd.exe set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Setting this environment variable is the recommended way to configure the authentication preferences, though if the environment variable is not set, the library searches for a credentials file in the same location as the Cloud SDK. For more information about Application Default Credentials, see https://cloud.google.com/docs/authentication/production

Using with Bazel

:warning: If you are using Windows or macOS there are additional instructions at the end of this document.

  1. Install Bazel using the instructions from the bazel.build website.

  2. Compile this example using Bazel:

    cd $HOME/google-cloud-cpp/google/cloud/pubsub/quickstart
    bazel build ...
    

    Note that, as it is often the case with C++ libraries, compiling these dependencies may take several minutes.

  3. Publish messages by running the example, changing the placeholder(s) to appropriate values:

    bazel run :quickstart -- [GCP PROJECT ID] [PUB/SUB TOPIC ID]
    
  4. Subscribe to messages by running the example, changing the placeholder(s) to appropriate values:

    bazel run :subscriber_quickstart -- [GCP PROJECT ID] [PUB/SUB SUBSCRIPTION ID]
    

Using with CMake

:warning: If you are using Windows or macOS there are additional instructions at the end of this document.

  1. Install CMake. The package managers for most Linux distributions include a package for CMake. Likewise, you can install CMake on Windows using a package manager such as chocolatey, and on macOS using homebrew. You can also obtain the software directly from the cmake.org.

  2. Install the dependencies with your favorite tools. As an example, if you use vcpkg:

    cd $HOME/vcpkg
    ./vcpkg install google-cloud-cpp[core,pubsub]
    

    Note that, as it is often the case with C++ libraries, compiling these dependencies may take several minutes.

  3. Configure CMake, if necessary, configure the directory where you installed the dependencies:

    cd $HOME/google-cloud-cpp/google/cloud/pubsub/quickstart
    cmake -S . -B .build -DCMAKE_TOOLCHAIN_FILE=$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake
    cmake --build .build
    
  4. Publish messages by running the example, changing the placeholder(s) to appropriate values:

       .build/quickstart [GCP PROJECT ID] [PUB/SUB TOPIC ID]
    
  5. Subscribe to messages by running the example, changing the placeholder(s) to appropriate values:

       .build/subscriber_quickstart [GCP PROJECT ID] [PUB/SUB SUBSCRIPTION ID]
    

Platform Specific Notes

macOS

gRPC requires an environment variable to configure the trust store for SSL certificates, you can download and configure this using:

curl -Lo roots.pem https://pki.google.com/roots.pem
export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="$PWD/roots.pem"

Windows

Bazel tends to create very long file names and paths. You may need to use a short directory to store the build output, such as c:\b, and instruct Bazel to use it via:

bazel --output_user_root=c:\b build ...

gRPC requires an environment variable to configure the trust store for SSL certificates, you can download and configure this using:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command ^
    (new-object System.Net.WebClient).Downloadfile( ^
        'https://pki.google.com/roots.pem', 'roots.pem')
set GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=%cd%\roots.pem