revoke 0.3.0

High-performance microservices infrastructure framework built with pure Rust
Documentation
# Revoke 框架

[![Crates.io](https://img.shields.io/crates/v/revoke.svg)](https://crates.io/crates/revoke)
[![Documentation](https://docs.rs/revoke/badge.svg)](https://docs.rs/revoke)
[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg)](LICENSE)

一个使用纯 Rust 构建的高性能微服务基础设施框架,为构建分布式系统提供全面的组件支持。

## 特性

- 🚀 **高性能**:基于异步 Rust,开销极小
- 🌐 **API 网关**:由 Cloudflare Pingora 驱动,性能卓越
- 🔍 **服务发现**:动态服务注册和发现
- ⚙️ **配置管理**:集中式配置,支持热重载
- 📊 **分布式追踪**:集成 OpenTelemetry 实现可观测性
- 📨 **消息队列**:各种消息队列系统的统一接口
- 🛡️ **弹性机制**:熔断器、限流和重试机制
- 🦀 **纯 Rust**:无外部系统依赖,纯 Rust 实现

## 快速开始

在 `Cargo.toml` 中添加 `revoke`:

```toml
[dependencies]
revoke = "0.1"
tokio = { version = "1", features = ["full"] }
```

### 基础示例

```rust
use revoke::prelude::*;
use std::sync::Arc;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建服务注册中心
    let registry = Arc::new(MemoryRegistry::new());
    
    // 注册服务
    let service = ServiceInfo {
        id: uuid::Uuid::new_v4(),
        name: "user-service".to_string(),
        version: "1.0.0".to_string(),
        address: "127.0.0.1".to_string(),
        port: 3000,
        protocol: Protocol::Http,
        metadata: Default::default(),
    };
    registry.register(service).await?;
    
    // 查询服务
    let services = registry.get_service("user-service").await?;
    println!("找到 {} 个 user-service 实例", services.len());
    
    Ok(())
}
```

## 功能标志

### 独立组件

- `gateway` - 带负载均衡的 API 网关
- `registry` - 服务注册和发现
- `config` - 配置管理
- `trace` - 分布式追踪
- `mq` - 消息队列抽象
- `resilience` - 熔断器和弹性模式

### 功能组合

- `default` = `full` - 所有功能启用
- `minimal` - 仅核心功能
- `service-mesh` - 网关 + 注册中心 + 配置 + 追踪
- `messaging` - 消息队列 + 配置
- `reliability` - 弹性 + 注册中心

### 使用示例

仅核心功能:
```toml
revoke = { version = "0.1", default-features = false }
```

服务网格组件:
```toml
revoke = { version = "0.1", default-features = false, features = ["service-mesh"] }
```

自定义选择:
```toml
revoke = { version = "0.1", default-features = false, features = ["gateway", "registry"] }
```

## 组件介绍

### API 网关

基于 Pingora 的高性能 API 网关:

```rust
use revoke::prelude::*;
use revoke::gateway::RevokeGateway;

let config = GatewayConfig {
    bind: "0.0.0.0:8080".to_string(),
    workers: 4,
    log_level: "info".to_string(),
    enable_health_check: true,
    health_check_interval: 10,
    backend_refresh_interval: 30,
};

let gateway = RevokeGateway::new(registry)?;
gateway.run(config)?;
```

### 服务注册中心

支持健康检查的动态服务发现:

```rust
// 开发环境使用内存注册中心
let registry = Arc::new(MemoryRegistry::new());

// 生产环境使用 Consul 注册中心
let consul_config = ConsulConfig::builder()
    .address("http://localhost:8500")
    .build()?;
let registry = Arc::new(ConsulRegistry::new(consul_config).await?);
```

### 配置管理

支持热重载的集中式配置:

```rust
use revoke::config::{ConfigProvider, memory::MemoryConfigProvider};

let config = Arc::new(MemoryConfigProvider::new());
config.set("database.url", "postgres://localhost/mydb").await?;

let db_url = config.get("database.url").await?;
```

### 熔断器

防止级联故障:

```rust
use revoke::resilience::{CircuitBreaker, CircuitBreakerBuilder};

let breaker = CircuitBreakerBuilder::new()
    .failure_threshold(5)
    .success_threshold(2)
    .timeout(Duration::from_secs(60))
    .build();

let result = breaker.call(async {
    // 可能失败的操作
    risky_operation().await
}).await?;
```

### 限流器

控制请求速率:

```rust
use revoke::resilience::{RateLimiter, RateLimiterBuilder};

let limiter = RateLimiterBuilder::new()
    .requests_per_second(100.0)
    .burst_size(200)
    .build();

if limiter.check_key("user-123").await? {
    // 处理请求
} else {
    // 超出限流
}
```

## 完整示例

以下是一个完整的微服务设置示例:

```rust
use revoke::prelude::*;
use revoke::gateway::RevokeGateway;
use revoke::resilience::{CircuitBreaker, RateLimiter};
use std::sync::Arc;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化组件
    let registry = Arc::new(MemoryRegistry::new());
    let config = Arc::new(MemoryConfigProvider::new());
    
    // 配置限流器
    let rate_limiter = RateLimiterBuilder::new()
        .requests_per_second(1000.0)
        .build();
    
    // 配置熔断器
    let circuit_breaker = CircuitBreakerBuilder::new()
        .failure_threshold(5)
        .build();
    
    // 注册服务
    for i in 0..3 {
        let service = ServiceInfo {
            id: uuid::Uuid::new_v4(),
            name: "api-service".to_string(),
            version: "1.0.0".to_string(),
            address: "127.0.0.1".to_string(),
            port: 3000 + i,
            protocol: Protocol::Http,
            metadata: Default::default(),
        };
        registry.register(service).await?;
    }
    
    // 启动网关
    let gateway_config = GatewayConfig {
        bind: "0.0.0.0:8080".to_string(),
        workers: 4,
        log_level: "info".to_string(),
        enable_health_check: true,
        health_check_interval: 10,
        backend_refresh_interval: 30,
    };
    
    let gateway = RevokeGateway::new(registry.clone())?;
    
    println!("在 {} 上启动 Revoke 网关", gateway_config.bind);
    gateway.run(gateway_config)?;
    
    Ok(())
}
```

## 架构

```
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   API 网关      │────▶│   服务注册中心   │◀────│     微服务      │
│   (Pingora)     │     │  (Consul/内存)  │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘
         │                       │                        │
         │              ┌─────────────────┐              │
         └─────────────▶│   配置中心      │◀─────────────┘
                        │  (Consul/内存)  │
                        └─────────────────┘
```

## 性能

Revoke 专为高性能设计:

- 尽可能使用零拷贝消息传递
- 全程使用 async/await 实现最佳并发
- 连接池和连接复用
- 使用 serde 进行高效序列化
- 热路径上的内存分配最小化

## 贡献

欢迎贡献!请阅读我们的[贡献指南](CONTRIBUTING.md)了解详情。

## 许可证

本项目采用以下任一许可证:

- Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHEhttp://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT]LICENSE-MIThttp://opensource.org/licenses/MIT)

可自由选择。

## 致谢

- 基于 Cloudflare 的 [Pingora]https://github.com/cloudflare/pingora 构建
- 受 Spring Cloud 和其他微服务框架启发
- 感谢 Rust 异步生态系统