use nacos_sdk::api::config::{ConfigChangeListener, ConfigResponse, ConfigServiceBuilder};
use nacos_sdk::api::constants;
use nacos_sdk::api::naming::{
NamingChangeEvent, NamingEventListener, NamingServiceBuilder, ServiceInstance,
};
use nacos_sdk::api::props::ClientProps;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::DEBUG)
.with_thread_names(true)
.with_thread_ids(true)
.init();
let client_props = ClientProps::new()
.server_addr(constants::DEFAULT_SERVER_ADDR)
.namespace("")
.app_name("simple_app")
.auth_username("nacos") .auth_password("nacos") ;
let config_service = ConfigServiceBuilder::new(client_props.clone())
.enable_auth_plugin_http() .build()
.await?;
let config_resp = config_service
.get_config("todo-data-id".to_string(), "LOVE".to_string())
.await;
match config_resp {
Ok(config_resp) => tracing::info!("get the config {}", config_resp),
Err(err) => tracing::error!("get the config {:?}", err),
}
let _listen = config_service
.add_listener(
"todo-data-id".to_string(),
"LOVE".to_string(),
std::sync::Arc::new(SimpleConfigChangeListener {}),
)
.await;
match _listen {
Ok(_) => tracing::info!("listening the config success"),
Err(err) => tracing::error!("listen config error {:?}", err),
}
let naming_service = NamingServiceBuilder::new(client_props)
.enable_auth_plugin_http() .build()
.await?;
let listener = std::sync::Arc::new(SimpleInstanceChangeListener);
let _subscribe_ret = naming_service
.subscribe(
"test-service".to_string(),
Some(constants::DEFAULT_GROUP.to_string()),
Vec::default(),
listener,
)
.await;
let service_instance1 = ServiceInstance {
ip: "127.0.0.1".to_string(),
port: 9090,
..Default::default()
};
let _register_instance_ret = naming_service
.batch_register_instance(
"test-service".to_string(),
Some(constants::DEFAULT_GROUP.to_string()),
vec![service_instance1],
)
.await;
tokio::time::sleep(tokio::time::Duration::from_millis(666)).await;
let instances_ret = naming_service
.get_all_instances(
"test-service".to_string(),
Some(constants::DEFAULT_GROUP.to_string()),
Vec::default(),
false,
)
.await;
match instances_ret {
Ok(instances) => tracing::info!("get_all_instances {:?}", instances),
Err(err) => tracing::error!("naming get_all_instances error {:?}", err),
}
tokio::time::sleep(tokio::time::Duration::from_millis(300)).await;
Ok(())
}
struct SimpleConfigChangeListener;
impl ConfigChangeListener for SimpleConfigChangeListener {
fn notify(&self, config_resp: ConfigResponse) {
tracing::info!("listen the config={}", config_resp);
}
}
pub struct SimpleInstanceChangeListener;
impl NamingEventListener for SimpleInstanceChangeListener {
fn event(&self, event: std::sync::Arc<NamingChangeEvent>) {
tracing::info!("subscriber notify: {:?}", event);
}
}