| Crates.io | flare-rpc-core |
| lib.rs | flare-rpc-core |
| version | 0.1.1 |
| created_at | 2025-03-03 08:07:03.947529+00 |
| updated_at | 2025-03-07 07:45:18.810729+00 |
| description | RPC framework core for Flare |
| homepage | |
| repository | https://github.com/flare152/flare |
| max_upload_size | |
| id | 1575283 |
| size | 152,647 |
Flare RPC Core 是 Flare 框架的 RPC 核心实现,基于 tonic (gRPC) 构建,提供高性能的服务注册、发现和负载均衡功能。
服务注册与发现
负载均衡
上下文传递
中间件支持
生命周期管理
配置管理
该库提供以下 feature flags:
client: 客户端功能,包含服务发现和拦截器server: 服务端功能,包含服务注册和应用上下文consul: 使用 consul 作为服务注册中心etcd: 使用 etcd 作为服务注册中心full: 启用所有功能默认配置:default = ["client", "server", "consul"]
client
├── tonic 0.12 (transport)
└── tower 0.5 (中间件支持)
server
├── tonic 0.12 (gRPC 实现)
└── tower 0.5 (服务组件)
consul
└── reqwest 0.12.12 (HTTP 客户端,支持 json)
etcd
└── etcd-client 0.14 (官方客户端)
[dependencies]
flare-rpc-core = { version = "0.1.0", default-features = false, features = ["client", "consul"] }
tokio = { version = "1.0", features = ["full"] }
anyhow = "1.0"
use flare_rpc_core::discover::{ConsulConfig, ConsulDiscover, LoadBalanceStrategy};
use flare_core::context::AppContextBuilder;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 配置 Consul
let config = ConsulConfig {
addr: "127.0.0.1:8500".to_string(),
timeout: Duration::from_secs(10),
protocol: "http".to_string(),
token: None,
};
// 创建服务发现客户端
let discovery = ConsulDiscover::new(config, LoadBalanceStrategy::RoundRobin);
discovery.start_watch().await;
// 构建请求上下文
let ctx = AppContextBuilder::new()
.user_id("user-001")
.client_id("client-001")
.with_language(Some("zh-CN"))
.with_trace_id("trace-001")
.build()?;
// 发送 RPC 请求
let response = call_rpc(ctx, client, request, |client, req| {
client.your_method(req)
}).await?;
}
[dependencies]
flare-rpc-core = { version = "0.1.0", default-features = false, features = ["server", "consul"] }
use flare_rpc_core::app::{App, AppBuilder};
use flare_rpc_core::discover::{ConsulConfig, ConsulRegistry};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 配置 Consul
let consul_config = ConsulConfig {
addr: "127.0.0.1:8500".to_string(),
timeout: Duration::from_secs(3),
protocol: "http".to_string(),
token: None,
};
// 创建服务注册器
let registry = ConsulRegistry::new(consul_config, Duration::from_secs(15)).await?;
// 构建应用
let app = AppBuilder::new("your-service")
.version("1.0.0")
.tag("rpc")
.tag("production")
.meta("protocol", "grpc")
.meta("region", "us-west")
.weight(10)
.register(registry)
.build();
// 运行服务
app.run("127.0.0.1", 50051, |server| {
server.add_service(your_service)
.serve(addr)
}).await?;
}
连接池管理
负载均衡优化
内存管理
服务设计
部署配置
性能调优
服务注册失败
服务发现异常
性能问题
欢迎提交 Issue 和 Pull Request!在提交 PR 之前,请确保:
cargo test --all-features)cargo fmt) 和 clippy (cargo clippy --all-features) 检查MIT License