@kiz8/inngest-service v0.1.0
@reputation-management/inngest-service
Сервис для обработки событий с использованием Inngest в системе управления репутацией.
Установка
npm install @reputation-management/inngest-serviceили
yarn add @reputation-management/inngest-serviceИспользование
Этот пакет предоставляет сервис для обработки событий с использованием Inngest. Он может быть развернут как отдельное приложение или интегрирован в существующее приложение Next.js.
Запуск как отдельное приложение
# Установка зависимостей
npm install
# Запуск в режиме разработки
npm run dev
# Сборка для продакшена
npm run build
# Запуск в продакшене
npm startСинхронизация функций Inngest
# Локальная синхронизация
npm run sync
# Синхронизация в продакшене
npm run sync:prodСтруктура проекта
app/- Код приложения Next.jsfunctions/- Функции Inngest для обработки событийevents/- Определения событий
Лицензия
MIT
Inngest Service для Reputation Management
Выделенный микросервис для обработки Inngest событий и задач в приложении Reputation Management.
Обзор
Этот микросервис обеспечивает:
- Единый API endpoint для Inngest (
/api/inngest) - Изолированную обработку фоновых и асинхронных задач
- Чистую интеграцию с Inngest Cloud
- Работу с базой данных через Prisma ORM
Схема взаимодействия
┌───────────────┐ ┌──────────────────┐ ┌────────────────┐
│ │ │ │ │ │
│ Web/Admin │─────────▶ inngest-client │─────────▶ Inngest Cloud │
│ Приложения │ │ (общий пакет) │ │ │
│ │ │ │ │ │
└───────────────┘ └──────────────────┘ └────────┬───────┘
│
│
▼
┌───────────────┐ ┌──────────────────┐ ┌────────────────┐
│ │ │ │ │ │
│ Worker │◀────────│ inngest-service │◀────────│ Триггеры и │
│ (обработка │ │ (микросервис) │ │ события │
│ данных) │ │ │ │ │
│ │ │ │ │ │
└───────────────┘ └──────────────────┘ └────────────────┘
│ │
│ │
▼ ▼
┌───────────────────────────────────────────────┐
│ │
│ Базы данных и API │
│ (PostgreSQL/Neon) │
│ │
└───────────────────────────────────────────────┘Поток данных
Отправка событий:
- Фронтенд-приложения (Web/Admin) или серверные компоненты используют
@reputation-management/inngest-clientдля отправки событий в Inngest - События включают: создание отзывов, запросы на анализ, запросы отчетов и т.д.
- Фронтенд-приложения (Web/Admin) или серверные компоненты используют
Обработка событий:
- Inngest Cloud доставляет события микросервису
inngest-service - Микросервис запускает соответствующие функции для обработки каждого события
- Функции обрабатывают данные асинхронно и независимо от основного приложения
- Inngest Cloud доставляет события микросервису
Интеграция с Worker:
- Для сложной обработки данных используется Worker сервис
- Worker может быть вызван через Inngest или напрямую
Результаты обработки:
- После обработки события, микросервис может:
- Отправить новые события в Inngest для дальнейшей обработки
- Сохранить результаты в базу данных
- Вызвать внешние API
- После обработки события, микросервис может:
Функции
- Анализ отзывов - анализ текста отзывов, определение тональности и ключевых слов
- Генерация отчетов - создание отчетов по заведениям на основе собранных данных
- Скрапинг данных - сбор отзывов и информации о заведениях из различных источников
Основные типы событий
| Название события | Описание | Инициатор | Обработчик |
|---|---|---|---|
review/created | Создание нового отзыва | Web/Admin | analyze-review.ts |
review/analyze-requested | Запрос на анализ отзыва | Web/Admin | analyze-review.ts |
review/analyzed | Отзыв проанализирован | Inngest Svc | Client apps |
venue/scrape-requested | Запрос на скрапинг данных заведения | Web/Admin | scrape-venue.ts |
venue/scraped | Данные заведения собраны | Inngest Svc | Client apps |
report/requested | Запрос на генерацию отчета | Web/Admin | generate-report.ts |
report/generated | Отчет сгенерирован | Inngest Svc | Client apps |
test/event | Тестовое событие | Web/Admin | Любой обработчик |
Разработка
# Запуск в режиме разработки
pnpm dev
# Сборка
pnpm build
# Запуск тестов
pnpm test
# Проверка типов
pnpm typecheckИнтеграция Prisma с Vercel
Для правильной работы Prisma в Vercel serverless-окружении внесены специальные настройки:
Автоматическая генерация Prisma клиента при каждом деплое:
"scripts": { "vercel-build": "prisma generate && next build", "postinstall": "prisma generate" }Плагин для монорепозитория, который решает проблемы с отсутствием файлов Prisma engine:
// next.config.js import { PrismaPlugin } from "@prisma/nextjs-monorepo-workaround-plugin"; const nextConfig = { // ... webpack: (config, { isServer }) => { if (isServer) { config.plugins = [...config.plugins, new PrismaPlugin()]; } return config; }, };Connection pooling для эффективной работы в serverless-среде:
- Используется
NEONDB_URL_POOLINGдля пула соединений - Предотвращает исчерпание лимита соединений с базой данных
- Используется
Деплой
Сервис настроен для деплоя на Vercel. Переменные окружения в vercel.json:
{
"buildCommand": "pnpm run vercel-build",
"env": {
"INNGEST_SIGNING_KEY": "${INNGEST_SIGNING_KEY}",
"INNGEST_EVENT_KEY": "${INNGEST_EVENT_KEY}",
"NEXT_PUBLIC_VERCEL_URL": "${VERCEL_URL}",
"NEONDB_URL": "${NEONDB_URL}",
"DIRECT_DATABASE_URL": "${DIRECT_DATABASE_URL}",
"NEONDB_URL_POOLING": "${NEONDB_URL_POOLING}"
}
}Переменные окружения для базы данных
NEONDB_URL- основное соединение с базой данныхDIRECT_DATABASE_URL- для миграций и прямого доступаNEONDB_URL_POOLING- URL с пулом соединений для serverless-среды
Синхронизация с Inngest Cloud
После деплоя на Vercel необходимо выполнить синхронизацию с Inngest Cloud:
# Локальная синхронизация
pnpm sync
# Синхронизация продакшн версии
pnpm sync:prodИнтеграция с другими сервисами
Другие сервисы могут отправлять события в Inngest через общий клиент из пакета @reputation-management/inngest-client. Преимущества такого подхода:
- Единые типы событий и интерфейсы между всеми сервисами
- Централизованное управление событиями
- Типобезопасность при отправке и обработке событий
- Избегание дублирования кода
Пример использования
import { reviewEvents } from "@reputation-management/inngest-client";
// Отправка события
await reviewEvents.analyzeRequested({
reviewId: "123",
venueId: "456",
text: "Отличное место, рекомендую!",
});Структура проекта
apps/inngest-service/
├── app/ # Next.js приложение
│ ├── api/ # API endpoints
│ │ └── inngest/ # Основной Inngest endpoint
│ │ └── route.ts
├── client.ts # Реэкспорт клиента из общего пакета
├── events/ # Реэкспорт событий из общего пакета
│ └── index.ts
├── functions/ # Inngest функции
│ ├── analyze-review.ts # Анализ отзывов
│ ├── generate-report.ts # Генерация отчетов
│ ├── scrape-venue.ts # Скрапинг данных заведений
│ └── index.ts # Экспорт всех функций
├── types.ts # Реэкспорт типов из общего пакета
├── next.config.js # Конфигурация Next.js с Prisma плагином
├── vercel.json # Конфигурация Vercel
└── package.json # Зависимости и скриптыЗависимости
Основные зависимости:
@reputation-management/inngest-client: workspace:* - общий клиент для Inngest@repo/database: workspace:* - пакет для работы с базой данных@prisma/client: ^5.10.2 - клиент Prisma ORMprisma: ^5.10.2 - инструменты Prisma CLI@prisma/nextjs-monorepo-workaround-plugin: ^5.10.2 - плагин для корректной работы в монорепозиторииinngest: ^3.3.1 - библиотека для работы с Inngestnext: ^14.0.4 - фреймворк для приложения
8 months ago