初始提交 - FutureOSS v1.0 插件化运行时框架

一切皆为插件的开发者工具运行时框架

🧩 核心特性:
  - 插件热插拔 (importlib 动态加载)
  - 依赖自动解析 (拓扑排序 + 循环检测)
  - 企业级稳定 (熔断/降级/重试/隔离)
  - 事件驱动 (发布/订阅事件总线)
  - 完整配置 (YAML 配置 + 热重载)
This commit is contained in:
Falck
2026-04-06 09:57:10 +08:00
commit 76147bae94
174 changed files with 15626 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# circuit-breaker 熔断器
为插件提供熔断能力,防止级联失败。
## 功能
- 失败计数熔断
- 状态:`closed``open``half-open`
- 可配置失败阈值
- 自动恢复机制
## 状态机
```
closed (正常) → open (熔断) → half-open (半开) → closed (恢复)
```
## 使用
```python
# 检查是否有熔断能力
if "circuit_breaker" in capabilities:
breaker = extensions["_circuit_breaker_provider"]
cb = breaker.create("my-plugin", threshold=5)
try:
result = cb.call(risky_function, arg1, arg2)
except Exception:
print("熔断器已触发")
```

View File

@@ -0,0 +1,70 @@
"""熔断插件 - 为插件提供熔断能力"""
from oss.plugin.types import Plugin, register_plugin_type
class CircuitBreakerProvider:
"""熔断能力提供者"""
def __init__(self):
self.breakers: dict[str, "CircuitBreaker"] = {}
def create(self, name: str, threshold: int = 5) -> "CircuitBreaker":
breaker = CircuitBreaker(name, threshold)
self.breakers[name] = breaker
return breaker
def get(self, name: str):
return self.breakers.get(name)
class CircuitBreaker:
"""熔断器"""
def __init__(self, name: str, threshold: int = 5):
self.name = name
self.threshold = threshold
self.failures = 0
self.state = "closed" # closed, open, half-open
def call(self, func, *args, **kwargs):
if self.state == "open":
raise Exception(f"熔断器 '{self.name}' 已打开")
try:
result = func(*args, **kwargs)
self.failures = 0
self.state = "closed"
return result
except Exception as e:
self.failures += 1
if self.failures >= self.threshold:
self.state = "open"
raise e
class CircuitBreakerPlugin(Plugin):
"""熔断插件"""
def __init__(self):
self.provider = CircuitBreakerProvider()
def init(self, deps: dict = None):
pass
def start(self):
pass
def stop(self):
pass
def get_provider(self):
return self.provider
# 注册类型
register_plugin_type("CircuitBreakerProvider", CircuitBreakerProvider)
register_plugin_type("CircuitBreaker", CircuitBreaker)
def New():
return CircuitBreakerPlugin()

View File

@@ -0,0 +1,17 @@
{
"metadata": {
"name": "circuit-breaker",
"version": "1.0.0",
"author": "FutureOSS",
"description": "熔断器 - 为插件提供熔断能力",
"type": "extension"
},
"config": {
"enabled": true,
"args": {
"default_threshold": 5
}
},
"dependencies": [],
"permissions": []
}