Enhance application with new features, improved error handling, and performance optimizations. Key updates include: added data validation, retry strategies for HTTP requests, detailed logging, and support for RabbitMQ exports. Updated dependencies and enhanced README documentation for better setup instructions.
This commit is contained in:
237
RABBITMQ_SETUP.md
Normal file
237
RABBITMQ_SETUP.md
Normal file
@@ -0,0 +1,237 @@
|
||||
# ANCHOR: RabbitMQ_Setup_Guide
|
||||
# Семантика: Руководство по настройке и использованию RabbitMQ в проекте price_parser
|
||||
|
||||
## Обзор
|
||||
|
||||
Проект `price_parser` теперь поддерживает экспорт данных в очередь сообщений RabbitMQ. Это позволяет:
|
||||
- Асинхронно обрабатывать данные о продуктах
|
||||
- Интегрироваться с другими системами через очереди
|
||||
- Масштабировать обработку данных
|
||||
- Обеспечивать надежную доставку сообщений
|
||||
|
||||
## Архитектура RabbitMQ
|
||||
|
||||
### Очереди
|
||||
- `price_parser.products` - очередь для данных о продуктах
|
||||
- `price_parser.logs` - очередь для логов парсера
|
||||
|
||||
### Exchange
|
||||
- `price_parser.exchange` - прямой exchange для маршрутизации сообщений
|
||||
|
||||
### Routing Keys
|
||||
- `products` - для данных о продуктах
|
||||
- `logs` - для логов
|
||||
|
||||
## Установка RabbitMQ
|
||||
|
||||
### Windows
|
||||
1. Скачайте RabbitMQ с официального сайта: https://www.rabbitmq.com/download.html
|
||||
2. Установите Erlang (требуется для RabbitMQ)
|
||||
3. Запустите RabbitMQ как службу Windows
|
||||
|
||||
### Docker (рекомендуется)
|
||||
```bash
|
||||
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
|
||||
```
|
||||
|
||||
### Linux (Ubuntu/Debian)
|
||||
```bash
|
||||
# Установка Erlang
|
||||
sudo apt-get install erlang
|
||||
|
||||
# Установка RabbitMQ
|
||||
sudo apt-get install rabbitmq-server
|
||||
|
||||
# Запуск службы
|
||||
sudo systemctl start rabbitmq-server
|
||||
sudo systemctl enable rabbitmq-server
|
||||
```
|
||||
|
||||
## Настройка проекта
|
||||
|
||||
### 1. Установка зависимостей
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. Конфигурация
|
||||
Скопируйте `env.example` в `.env` и настройте параметры:
|
||||
|
||||
```bash
|
||||
# RabbitMQ настройки
|
||||
RABBITMQ_HOST=localhost
|
||||
RABBITMQ_PORT=5672
|
||||
RABBITMQ_USERNAME=guest
|
||||
RABBITMQ_PASSWORD=guest
|
||||
RABBITMQ_VIRTUAL_HOST=/
|
||||
|
||||
# Очереди
|
||||
RABBITMQ_PRODUCTS_QUEUE=price_parser.products
|
||||
RABBITMQ_LOGS_QUEUE=price_parser.logs
|
||||
RABBITMQ_EXCHANGE=price_parser.exchange
|
||||
|
||||
# Включение экспорта в RabbitMQ
|
||||
ENABLE_RABBITMQ_EXPORT=true
|
||||
```
|
||||
|
||||
### 3. Проверка подключения
|
||||
```bash
|
||||
python -c "from utils.exporters import validate_rabbitmq_connection; print('RabbitMQ доступен' if validate_rabbitmq_connection() else 'RabbitMQ недоступен')"
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### Запуск парсера с экспортом в RabbitMQ
|
||||
```bash
|
||||
python src/main.py
|
||||
```
|
||||
|
||||
### Структура сообщений
|
||||
|
||||
#### Сообщение с данными о продуктах
|
||||
```json
|
||||
{
|
||||
"message_id": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"timestamp": "2023-10-27T12:34:56.789Z",
|
||||
"source": "price_parser",
|
||||
"products": [
|
||||
{
|
||||
"name": "Peptide X",
|
||||
"volume": "30ml",
|
||||
"price": 1500,
|
||||
"url": "https://elixirpeptide.ru/catalog/peptide-x/?product=variant1"
|
||||
}
|
||||
],
|
||||
"run_id": "20231027-123456",
|
||||
"total_count": 1
|
||||
}
|
||||
```
|
||||
|
||||
#### Сообщение с логами
|
||||
```json
|
||||
{
|
||||
"message_id": "550e8400-e29b-41d4-a716-446655440001",
|
||||
"timestamp": "2023-10-27T12:34:56.789Z",
|
||||
"source": "price_parser",
|
||||
"log_records": [
|
||||
{
|
||||
"run_id": "20231027-123456",
|
||||
"timestamp": "2023-10-27T12:34:56.789Z",
|
||||
"level": "INFO",
|
||||
"message": "Парсинг начат."
|
||||
}
|
||||
],
|
||||
"run_id": "20231027-123456"
|
||||
}
|
||||
```
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### RabbitMQ Management UI
|
||||
Если используется Docker с management plugin:
|
||||
- URL: http://localhost:15672
|
||||
- Логин: guest
|
||||
- Пароль: guest
|
||||
|
||||
### Проверка очередей
|
||||
```bash
|
||||
# Установка rabbitmqadmin
|
||||
wget http://localhost:15672/cli/rabbitmqadmin
|
||||
chmod +x rabbitmqadmin
|
||||
|
||||
# Просмотр очередей
|
||||
./rabbitmqadmin list queues
|
||||
|
||||
# Просмотр сообщений
|
||||
./rabbitmqadmin get queue=price_parser.products
|
||||
```
|
||||
|
||||
## Обработка сообщений
|
||||
|
||||
### Python Consumer Example
|
||||
```python
|
||||
import pika
|
||||
import json
|
||||
from core.models import ProductDataMessage
|
||||
|
||||
def callback(ch, method, properties, body):
|
||||
"""Обработчик сообщений из очереди продуктов"""
|
||||
try:
|
||||
data = json.loads(body)
|
||||
message = ProductDataMessage(**data)
|
||||
|
||||
print(f"Получено {message.total_count} продуктов")
|
||||
for product in message.products:
|
||||
print(f"- {product.name}: {product.price} руб.")
|
||||
|
||||
ch.basic_ack(delivery_tag=method.delivery_tag)
|
||||
except Exception as e:
|
||||
print(f"Ошибка обработки сообщения: {e}")
|
||||
ch.basic_nack(delivery_tag=method.delivery_tag)
|
||||
|
||||
# Подключение к RabbitMQ
|
||||
connection = pika.BlockingConnection(
|
||||
pika.ConnectionParameters('localhost')
|
||||
)
|
||||
channel = connection.channel()
|
||||
|
||||
# Подписка на очередь
|
||||
channel.basic_consume(
|
||||
queue='price_parser.products',
|
||||
on_message_callback=callback
|
||||
)
|
||||
|
||||
print("Ожидание сообщений...")
|
||||
channel.start_consuming()
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Проблемы подключения
|
||||
1. Проверьте, что RabbitMQ запущен
|
||||
2. Убедитесь в правильности настроек в `.env`
|
||||
3. Проверьте доступность порта 5672
|
||||
|
||||
### Проблемы с правами доступа
|
||||
```bash
|
||||
# Создание пользователя (если нужно)
|
||||
sudo rabbitmqctl add_user myuser mypassword
|
||||
sudo rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"
|
||||
```
|
||||
|
||||
### Проблемы с очередями
|
||||
```bash
|
||||
# Очистка очереди (осторожно!)
|
||||
sudo rabbitmqctl purge_queue price_parser.products
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Рекомендации по безопасности
|
||||
1. Измените стандартные учетные данные (guest/guest)
|
||||
2. Используйте SSL/TLS для продакшена
|
||||
3. Ограничьте права доступа пользователей
|
||||
4. Регулярно обновляйте RabbitMQ
|
||||
|
||||
### SSL настройка
|
||||
```bash
|
||||
# В .env добавьте:
|
||||
RABBITMQ_SSL=True
|
||||
RABBITMQ_SSL_CERT_FILE=/path/to/cert.pem
|
||||
RABBITMQ_SSL_KEY_FILE=/path/to/key.pem
|
||||
```
|
||||
|
||||
## Производительность
|
||||
|
||||
### Настройки для высокой нагрузки
|
||||
```bash
|
||||
# В .env:
|
||||
RABBITMQ_HEARTBEAT=60
|
||||
RABBITMQ_CONNECTION_TIMEOUT=10
|
||||
RABBITMQ_BLOCKED_CONNECTION_TIMEOUT=60
|
||||
```
|
||||
|
||||
### Мониторинг производительности
|
||||
- Используйте RabbitMQ Management UI
|
||||
- Следите за размером очередей
|
||||
- Мониторьте время обработки сообщений
|
||||
Reference in New Issue
Block a user