增加范例

This commit is contained in:
zwf
2026-06-02 16:30:48 +08:00
parent 291e6fcaae
commit f4e7e1b3d2
26 changed files with 9578 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
import datetime
import json
import logging
from paste.core.logging import echo_log
from paste.db.redis import StreamActor
from paste.web.decorators import route
from paste.web.handler import RequestHandler
@route("/stream")
class MessageHandler(RequestHandler):
"""
演示请求发布 Redis Stream 消息。
"""
# 从配置中加载 Stream 配置路径
stream_config_path = "redis.streams.demo"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 初始化 StreamActor 实例(按配置创建)
self.actor = StreamActor.new_actor(self.stream_config_path)
async def post(self):
"""
接收前端 POST 请求,发布消息到 Redis Stream,立即响应。
请求体格式:
{
"user_id": "123",
"event": "login",
"data": {"ip": "192.168.1.1"}
}
"""
try:
# 1. 获取请求参数
body = self.request_arguments()
user_id = body.get("user_id")
event = body.get("event")
data = body.get("data", {})
if not user_id or not event:
self.response_error(
Exception("参数缺失:必须提供 user_id 和 event"),
status_code=400,
api_status_code=400
)
return
# 2. 构造消息数据
message_data = {
"user_id": user_id,
"event": event,
"timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat() + 'Z',
"data": json.dumps(data)
}
# 3. 异步发布消息(立即返回,不等待消费)
msg_id = await self.actor.publish(message_data)
# 4. 响应成功
self.response_ok(
message="消息已成功发布",
message_id=msg_id,
stream=self.stream_config_path
)
except Exception as e:
echo_log('异常', logging.ERROR, True)
self.response_error(e, status_code=500, api_status_code=500)