cloud-pubsub

Crates.iocloud-pubsub
lib.rscloud-pubsub
version0.9.0
sourcesrc
created_at2019-04-05 02:18:40.247639
updated_at2023-01-21 03:45:18.444413
descriptionGoogle Cloud PubSub Client
homepagehttps://github.com/kayleg/cloud-pubsub
repositoryhttps://github.com/kayleg/cloud-pubsub
max_upload_size
id125907
size61,228
Kayle Gishen (kayleg)

documentation

README

cloud-pubsub

Provides methods to consume messages from Google PubSub using Futures and Hyper.

Authentication

Authentication is provided by rust-goauth. The BaseClient expects to receive the path to the file containing your Google Cloud service account JSON key.

Token Renewal

The JWT token has a short life time and needs to be renewed periodically for long lived processes.

There is a provided helper which will renew the token every 15 mins:

let pubsub = match BaseClient::create(config.google_application_credentials) {
    Err(e) => panic!("Failed to initialize pubsub: {}", e),
        Ok(p) => p,
};

tokio::run(lazy(move || {
    pubsub.spawn_token_renew();
}))

Env Config

Envy is an excellent way to load your config.

#[derive(Deserialize)]
struct Config {
    pubsub_subscription: String,
    google_application_credentials: String,
}


fn main() {
    let parsed_env = envy::from_env::<Config>();
    if let Err(e) = parsed_env {
        eprintln!("ENV is not valid: {}", e);
        std::process::exit(1);
    }
    let config = parsed_env.unwrap();

    let pubsub = match BaseClient::create(config.google_application_credentials) {
        Err(e) => panic!("Failed to initialize pubsub: {}", e),
        Ok(p) => p,
    };
}

Log Config

In order to produce log output, executables have to use a logger implementation compatible with the log facade. There are many available implementations to chose from, for example:

env_logger is an excellent way to log in your executables.

[dependencies]
log = "0.4"
env_logger = "0.7"
fn main() {
    env_logger::init();

    info!("starting up");

    // ...
}

Subscribing

Connecting to existing subscription

let sub = my_client.subscribe("subscription-name")

Subscribing to a topic

When subscribing to a topic, a random subscription name will be generated. To prevent dangling subscriptions, you need to explicitly call subscription.destroy().

Commit count: 56

cargo fmt