tin-nacos-wrapper

Crates.iotin-nacos-wrapper
lib.rstin-nacos-wrapper
version0.1.0
created_at2025-11-24 03:34:05.808621+00
updated_at2025-11-24 03:34:05.808621+00
descriptionA Rust library for Nacos service discovery and configuration management
homepagehttps://github.com/JiabinTang/tin-nacos-wrapper
repositoryhttps://github.com/JiabinTang/tin-nacos-wrapper
max_upload_size
id1947330
size74,680
唐加彬 (JiabinTang)

documentation

README

tin-nacos-wrapper

一个用于 Nacos 服务发现和配置管理的 Rust 库。该库提供了对 nacos-sdk 的高级封装,以简化 Nacos 集成到 Rust 应用程序中的过程。

功能特性

  • 服务注册:初始化时自动将服务实例注册到 Nacos。
  • 服务发现:订阅服务变更并发现健康实例。
  • 配置管理:访问 Nacos 配置服务。
  • 远程服务调用:用于向已发现的服务发送 HTTP 请求的工具。
  • 简化的 API:易于使用的 NacosClient 和配置。

安装

在你的 Cargo.toml 中添加以下内容:

[dependencies]
tin-nacos-wrapper = "0.1.0"

使用方法

1. 配置

使用 NacosConfig 定义你的 Nacos 配置:

use tin_nacos_wrapper::NacosConfig;

let config = NacosConfig {
    server_addr: "127.0.0.1:8848".to_string(),
    namespace: "public".to_string(),
    app_name: "my-service".to_string(),
    group_name: "DEFAULT_GROUP".to_string(),
    client_ip: "127.0.0.1".to_string(),
    client_port: 8080,
    auth_username: Some("nacos".to_string()), // 可选
    auth_password: Some("nacos".to_string()), // 可选
};

2. 初始化

初始化 NacosClient。这将自动将当前服务实例注册到 Nacos。

use tin_nacos_wrapper::NacosClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化客户端
    let client = NacosClient::init(config).await?;
    
    // ... 应用程序逻辑 ...

    Ok(())
}

3. 服务发现与远程调用

使用 RemoteServiceClient 发现服务并进行 HTTP 调用。

use tin_nacos_wrapper::RemoteServiceClient;
use serde_json::Value;

async fn call_other_service(client: &NacosClient) -> Result<(), Box<dyn std::error::Error>> {
    // 获取 "target-service" 的一个健康实例地址 (ip:port)
    let address = RemoteServiceClient::get_service_address(client, "target-service").await?;
    
    // 构建 URL
    let url = format!("http://{}/api/data", address);
    
    // 发送 GET 请求
    let response: Value = RemoteServiceClient::get_with_response(&url, None).await?;
    println!("Response: {:?}", response);
    
    Ok(())
}

4. 手动注册与订阅

你也可以手动注册实例或订阅服务。

// 注册另一个实例
client.register_instance(
    "another-service".to_string(),
    Some("DEFAULT_GROUP".to_string()),
    "192.168.1.100".to_string(),
    9090
).await?;

// 订阅服务
client.subscribe_service(
    Some("DEFAULT_GROUP".to_string()),
    "target-service".to_string()
).await?;

许可证

MIT

Commit count: 0

cargo fmt