You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# Busrt Worker
|
|
|
|
|
> `BUS/RT`是一个快速、灵活且非常易于使用的框架,它使用Rust/Tokio编写,受到NATS、ZeroMQ和Nanomsg的启发。
|
|
|
|
|
|
|
|
|
|
Busrt Worker是一个基于busrt消息中间件的异步框架,它对Python库进行了封装,使其更易于使用。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 特点
|
|
|
|
|
|
|
|
|
|
- 异步:Busrt Worker基于python asyncio异步引擎,可以轻松处理高并发请求。
|
|
|
|
|
- 易用性:Busrt Worker对原生的busrt python客户端进行了封装,使用装饰器即可轻松创建rpc服务。
|
|
|
|
|
- 高性能:BUS/RT 使用Rust/Tokio编写,具有出色的性能和可靠性。
|
|
|
|
|
|
|
|
|
|
## 用法
|
|
|
|
|
|
|
|
|
|
要使用Busrt Worker,请按照以下步骤操作:
|
|
|
|
|
|
|
|
|
|
1. 安装Busrt Worker:`pip install busrt-worker`
|
|
|
|
|
2. 导入Busrt Worker:在您的Python项目中导入Busrt Worker。
|
|
|
|
|
3. 创建Busrt Worker App:创建一个App对象,并注册连接信息。
|
|
|
|
|
4. 处理消息:使用装饰器指明消息处理方式。
|
|
|
|
|
|
|
|
|
|
以下是一个示例代码片段,演示如何使用Busrt Worker:
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
|
|
from loguru import logger
|
|
|
|
|
|
|
|
|
|
from busrtworker import App, ConnectionInfo
|
|
|
|
|
# 创建 App对象
|
|
|
|
|
app = App()
|
|
|
|
|
|
|
|
|
|
# 连接信息
|
|
|
|
|
api_ci = ConnectionInfo('api', 'localhost:9800', 'busrt.worker.test', static=True, topic='test/#')
|
|
|
|
|
caller_ci = ConnectionInfo('caller', 'localhost:9800', 'busrt.worker.test', static=True)
|
|
|
|
|
|
|
|
|
|
# 注册连接
|
|
|
|
|
api = app.registry(api_ci)
|
|
|
|
|
app.registry(caller_ci)
|
|
|
|
|
|
|
|
|
|
# rpc调用
|
|
|
|
|
@api.on_call()
|
|
|
|
|
def add(a, b):
|
|
|
|
|
return a + b
|
|
|
|
|
|
|
|
|
|
# 主题订阅
|
|
|
|
|
@api.subscribe('test/:name')
|
|
|
|
|
def print_name(name: str):
|
|
|
|
|
logger.info(f'{name} pub message')
|
|
|
|
|
|
|
|
|
|
# 钩子函数注册
|
|
|
|
|
@app.run_on_startup
|
|
|
|
|
async def test(server):
|
|
|
|
|
async def call():
|
|
|
|
|
await asyncio.sleep(1)
|
|
|
|
|
logger.info(f'call remote add result {(await app.caller.add(api_ci.final_name,a=1, b=2))}')
|
|
|
|
|
await app.caller.send('test/i_am_caller')
|
|
|
|
|
asyncio.create_task(call())
|
|
|
|
|
|
|
|
|
|
# 启动程序
|
|
|
|
|
app.run()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
The MIT License.
|