完全用python 实现消息中间件7

为了实现一个AI服务端和一个User服务端,并使用我们之前讨论的简单消息中间件,我们可以定义两个服务:一个用于AI服务,另一个用于User服务。这两个服务将通过我们的消息中间件进行通信。
以下是两个服务的简化实现:

User服务端(发送任务)

from fastapi import FastAPI, HTTPException
from typing import Dict
import requests
app = FastAPI()
# 发送任务到AI服务
def send_task_to_ai(task: Dict):
    response = requests.post("http://ai-service-url/receive_task", json=task)
    if response.status_code != 200:
        raise HTTPException(status_code=500, detail="Failed to send task to AI service")
    return response.json()
@app.post("/submit_task")
async def submit_task(task: Dict):
    try:
        response = send_task_to_ai(task)
        return {"status": "Task submitted", "task_id": response["task_id"]}
    except HTTPException as e:
        return {"status": "Error", "message": str(e)}
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8001)

AI服务端(接收任务并处理)

from fastapi import FastAPI, HTTPException
from typing import Dict
import json
import time
app = FastAPI()
# 存储任务的字典,键为任务ID,值为任务内容
tasks: Dict[str, Dict[str, str]] = {}
# 任务队列的装饰器,用于并发控制
def queue_decorator(func):
    def wrapper(*args, **kwargs):
        with lock:
            return func(*args, **kwargs)
    return wrapper
@app.post("/receive_task")
async def receive_task(task: Dict):
    task_id = str(uuid4())
    task["id"] = task_id
    tasks[task_id] = task
    
    # 等待任务个数或时间t满足条件
    while len(tasks) < 5 or time.time() < tasks[task_id]["expiration_time"]:
        time.sleep(1)
    
    # 开始处理任务
    result = {"id": task_id, "content": "AI processed task"}
    
    # 移除处理完成的任务
    del tasks[task_id]
    
    return {"status": "Task processed", "result": result}
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8002)

在这个例子中,User服务端通过发送POST请求到AI服务端的/receive_task端点来提交任务。AI服务端接收到任务后,将任务存储在一个字典中,并等待任务个数或时间t满足条件后开始处理。处理完成后,它将结果发送回User服务端。
请注意,这个示例没有实现完整的错误处理和重试机制,并且在实际应用中,你可能需要添加这些功能。此外,这个示例假设AI服务端和User服务端都在同一台机器上运行,并且它们可以直接通过HTTP进行通信。在生产环境中,你可能需要考虑使用网络隔离、安全性、负载均衡等高级特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方佑

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值