✅ Интеграция SSE + Redis Pub/Sub для real-time OCR результатов
🎯 Основные изменения: Backend: - Реализован SSE endpoint /events/{task_id} для real-time стриминга событий - Интеграция Redis Pub/Sub для получения событий от n8n - Исправлен путь к .env файлу (абсолютный путь) - Убран префикс /api/v1 для events router - Добавлено подробное логирование событий Frontend: - Переключён на Vite dev mode для работы proxy - Настроен proxy /events -> backend:8100 - Реализована модалка с крутилкой при загрузке файла - SSE клиент для получения OCR результатов в real-time - Отображение результатов AI анализа в модалке Docker: - Frontend: изменён на npm run dev (Vite dev server) - Добавлен host.docker.internal для доступа к backend - Настроен proxy в docker-compose Утилиты: - monitor_redis_direct.py - мониторинг Redis Pub/Sub - test_redis_publish_direct.py - тестирование публикации в Redis 🚀 Полная цепочка работает: Frontend → Backend SSE → Redis Pub/Sub ← n8n → OCR/AI → Result
This commit is contained in:
73
test_redis_publish_direct.py
Executable file
73
test_redis_publish_direct.py
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Тест прямой публикации в Redis (имитация n8n Redis ноды)
|
||||
"""
|
||||
import redis
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
print("=" * 60)
|
||||
print("🧪 ТЕСТ ПРЯМОЙ ПУБЛИКАЦИИ В REDIS")
|
||||
print("=" * 60)
|
||||
|
||||
# Подключение к Redis
|
||||
r = redis.Redis(
|
||||
host='crm.clientright.ru',
|
||||
port=6379,
|
||||
password='CRM_Redis_Pass_2025_Secure!',
|
||||
decode_responses=True
|
||||
)
|
||||
|
||||
# Проверка подключения
|
||||
try:
|
||||
r.ping()
|
||||
print("✅ Redis подключен!")
|
||||
except Exception as e:
|
||||
print(f"❌ Ошибка подключения: {e}")
|
||||
exit(1)
|
||||
|
||||
# Тестовые данные
|
||||
claim_id = "CLM-TEST-DIRECT-123"
|
||||
channel = f"ocr_events:{claim_id}"
|
||||
|
||||
event_data = {
|
||||
"event_type": "ocr_completed",
|
||||
"status": "success",
|
||||
"message": "✅ Тест прямой публикации из Python (имитация n8n)",
|
||||
"data": {
|
||||
"file_id": "test-file-123",
|
||||
"is_valid_document": True,
|
||||
"test_mode": True,
|
||||
"source": "direct_redis_publish"
|
||||
},
|
||||
"timestamp": datetime.now().isoformat()
|
||||
}
|
||||
|
||||
message = json.dumps(event_data, ensure_ascii=False)
|
||||
|
||||
print(f"\n📺 Канал: {channel}")
|
||||
print(f"📦 Сообщение:")
|
||||
print(json.dumps(event_data, indent=2, ensure_ascii=False))
|
||||
print("\n" + "=" * 60)
|
||||
|
||||
# Публикация
|
||||
try:
|
||||
num_subscribers = r.publish(channel, message)
|
||||
print(f"\n✅ Сообщение опубликовано!")
|
||||
print(f"👥 Количество подписчиков: {num_subscribers}")
|
||||
|
||||
if num_subscribers == 0:
|
||||
print("\n⚠️ ВНИМАНИЕ: Нет активных подписчиков!")
|
||||
print(" Это нормально, если никто не слушает канал.")
|
||||
print(" Запусти monitor_redis_direct.py в другом терминале.")
|
||||
else:
|
||||
print(f"\n🎉 {num_subscribers} подписчик(ов) получили сообщение!")
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ Ошибка публикации: {e}")
|
||||
finally:
|
||||
r.close()
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print(f"⏰ Завершено: {datetime.now().strftime('%H:%M:%S')}")
|
||||
|
||||
Reference in New Issue
Block a user