⚡ 初始提交 - FutureOSS v1.0 插件化运行时框架
一切皆为插件的开发者工具运行时框架
🧩 核心特性:
- 插件热插拔 (importlib 动态加载)
- 依赖自动解析 (拓扑排序 + 循环检测)
- 企业级稳定 (熔断/降级/重试/隔离)
- 事件驱动 (发布/订阅事件总线)
- 完整配置 (YAML 配置 + 热重载)
This commit is contained in:
70
store/@{FutureOSS}/circuit-breaker/main.py
Normal file
70
store/@{FutureOSS}/circuit-breaker/main.py
Normal 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()
|
||||
Reference in New Issue
Block a user