### Чирцов Т А группа 1.1


# Лабораторная работа по использованию RabbitMQ в Java Spring

## Обзор проекта
Проект включает:
- **ProducerController**: отправка сообщений в очередь RabbitMQ.
- **PublisherController**: публикация сообщений в обмен.
- **Subscriber** и **Consumer**: приём сообщений.
- **SubscriberWithRouting**: подписчик на очереди `info` и `error`.

## Настройка окружения

### 1. Запуск RabbitMQ
Команда для запуска контейнера:
```bash
sudo docker run -d --hostname rabbitmq --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
```
Веб-интерфейс будет доступен на `localhost:15672`, брокер сообщений — на `localhost:5672`.

### 2. Установка зависимостей
Убедитесь, что установлен JDK 23, и выполните:
```bash
mvn clean install
```

### 3. Запуск приложения
Команда для запуска:
```bash
mvn spring-boot:run
```
Приложение откроется на `localhost:8080`.

## Проверка работы с Curl

### Тест 1: `ProducerController`
**Метод:** POST  
**URL:** `http://localhost:8080/api/producer/send?message=<ваше_сообщение>`

**Пример:**
```bash
curl -X POST "http://localhost:8080/api/producer/send?message=Hello%20RabbitMQ"
```
**Результат:**
```
Сообщение добавлено в очередь: task_queue, текст: Hello RabbitMQ
```

### Тест 2: `PublisherController`
**Метод:** POST  
**URL:** `http://localhost:8080/api/publisher/publish?message=<сообщение>&routingKey=<ключ>`

С ключом маршрутизации:
```bash
curl -X POST "http://localhost:8080/api/publisher/publish?message=Log%20message&routingKey=info"
```
Без ключа:
```bash
curl -X POST "http://localhost:8080/api/publisher/publish?message=Log%20message"
```
**Ответ:**
```
Сообщение отправлено в direct_logs с ключом: info
```
или:
```
Сообщение отправлено в logs без ключа
```

### Тест 3: `Subscriber`
При публикации через `ProducerController` или `PublisherController`:
```
Получено сообщение: Log message
```

### Тест 4: `Consumer`
При отправке сообщения в `task_queue`:
```
Получено сообщение из очереди задач: Hello RabbitMQ
```

### Тест 5: `SubscriberWithRouting`
**Очередь `info`:**
```bash
curl -X POST "http://localhost:8080/api/publisher/publish?message=Informational%20message&routingKey=info"
```
**Результат:**
```
Информационное сообщение: Informational message
```

**Очередь `error`:**
```bash
curl -X POST "http://localhost:8080/api/publisher/publish?message=Error%20message&routingKey=error"
```
**Результат:**
```
Ошибка: Error message
```

# Скриншоты:

![Consumer.png](images/Consumer.png)
![Producer.png](images/Producer.png)
![ProducerController.png](images/ProducerController.png)
![Publisher.png](images/Publisher.png)
![PublisherController.png](images/PublisherController.png)
![PublisherWithRouting.png](images/PublisherWithRouting.png)
![Subscriber.png](images/Subscriber.png)
![SubscriberWithRouting.png](images/SubscriberWithRouting.png)