Module apollo_client::conf

source ·
Available on crate feature conf only.
Expand description

Apollo configuration apis.

Refs: https://www.apolloconfig.com/#/zh/usage/other-language-client-user-guide.

Example

Simple fetch configuration:

use apollo_client::{
    conf::{meta::IpValue, requests::CachedFetchRequest, ApolloConfClientBuilder},
    errors::ApolloClientResult,
};
use ini::Properties;
use std::error::Error;
use url::Url;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    env_logger::init();

    // Create configuration client.
    let client =
        ApolloConfClientBuilder::new_via_config_service(Url::parse("http://localhost:8080")?)?
            .build()?;

    // Request apollo cached configuration api.
    let configuration: Properties = client
        .cached_fetch(CachedFetchRequest {
            app_id: "SampleApp".to_string(),
            namespace_name: "application.json".to_string(),
            ip: Some(IpValue::HostName),
            ..Default::default()
        })
        .await?;

    // Get the content of configuration.
    let content = configuration.get("content");
    dbg!(content);

    Ok(())
}

Watch configuration and fetch when changed:

use apollo_client::conf::{meta::IpValue, requests::WatchRequest, ApolloConfClientBuilder};
use cidr_utils::cidr::IpCidr;
use futures_util::{pin_mut, stream::StreamExt};
use std::error::Error;
use url::Url;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    env_logger::init();

    // Create configuration client.
    let client =
        ApolloConfClientBuilder::new_via_config_service(Url::parse("http://localhost:8080")?)?
            .build()?;

    // Request apollo notification api, and fetch configuration when notified.
    let stream = client.watch(WatchRequest {
        app_id: "SampleApp".to_string(),
        namespace_names: vec![
            "application.properties".into(),
            "application.json".into(),
            "application.yml".into(),
        ],
        ip: Some(IpValue::HostCidr(IpCidr::from_str("172.16.0.0/16")?)),
        ..Default::default()
    });

    pin_mut!(stream);

    // There is a dead loop, `next()` is returned when configuration has changed.
    while let Some(response) = stream.next().await {
        let responses = response?;
        for response in responses {
            let _ = dbg!(response);
        }
    }

    Ok(())
}

Modules

Structs