Merge pull request 'tepechin_kirill_lab_4' (#45) from tepechin_kirill_lab_4 into main

Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/45
This commit is contained in:
Alexey 2023-12-28 10:55:19 +04:00
commit 5f1bb5e2bd
9 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,28 @@
## Лабораторная работа №4, ПИбд-42 Тепечин Кирилл
### Пример работы
Publisher
![publisher](publisher.png)
Consumer1
![Consumer1](consumer1.png)
Consumer2
![Consumer2](consumer2.png)
Отчёт Management UI, Consumer1 и Consumer2
![report](report.png)
Отчёт Management UI, Consumer1 и Consumer1
![report2](report2.png)
Здесь в очереди скапливаются сообщения
### Ссылка на видео
https://youtu.be/GyO68cdpgT0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -0,0 +1,44 @@
import com.rabbitmq.client.*;
public class Consumer1 {
private static final String EXCHANGE_NAME = "event_exchange";
private static final String QUEUE_NAME = "consumer1_queue";
public static void main(String[] args) {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Объявление очереди
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// Привязка очереди к обмену
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
// Настройка consumer
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody());
System.out.println("Consumer 1 Получено: " + message);
try {
Thread.sleep(3000); // Моделирование времени обработки
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("Consumer 1 Обработано: " + message);
};
// Начало приема сообщений
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
System.out.println("Consumer 1 ожидает сообщений. Для выхода нажмите CTRL+C");
while (true) {
// Поддержание работы приложения
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@ -0,0 +1,40 @@
import com.rabbitmq.client.*;
public class Consumer2 {
private static final String EXCHANGE_NAME = "event_exchange";
private static final String QUEUE_NAME = "consumer2_queue";
public static void main(String[] args) {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Объявление очереди
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// Привязка очереди к обмену
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
// Настройка consumer
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody());
System.out.println("Consumer 2 Получено: " + message);
// Нет задержки обработки для Потребителя 2
System.out.println("Consumer 2 Обработано: " + message);
};
// Начало приема сообщений
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
System.out.println("Consumer 2 ожидает сообщений. Для выхода нажмите CTRL+C");
while (true) {
// Поддержание работы приложения
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@ -0,0 +1,33 @@
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Publisher {
private static final String EXCHANGE_NAME = "event_exchange";
public static void main(String[] args) {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Объявление обмена
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
// Генерация и отправка сообщений
while (true) {
String message = generateEventMessage();
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
System.out.println("Отправлено: " + message);
Thread.sleep(1000); // Ожидание 1 секунду
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String generateEventMessage() {
return "Необходимо создать отчет";
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB