evillord666 / cassette Goto Github PK
View Code? Open in Web Editor NEWJava study project to work with message queues
License: Apache License 2.0
Java study project to work with message queues
License: Apache License 2.0
Необходимо реализовать тесты в отдельном профиле (functests) - application-functests.yml (ЭТУ ЗАДАЧУ РЕАЛИЗОВАТЬ ПОСЛЕ РЕАЛИЗАЦИИ ПРОФИЛЕЙ)
Методология работы тестов должна быть следующей при КАЖДОМ тесте:
Подготовить набор:
Кроме того необходимо создать агрегирующий интерфейс, в котором нужно создать контракт для получения интерфейсов всех репозиториев (IDbContext) и его имплементацию RockNRollDbContext (ну типа живи быстро, умри молодым, дело в том, что Scope этой имплементации - Request)
Рекомендуется подготовить VirtualBox виртуальную машина с Linux ОС (например, Mint)
Необходимо ее оснастить:
После завершения реализации DTO необходимо подготовить:
Требования к методам:
При создании, обновлении и удалении ресурса все операции необходимо вынести в классы -менеджеры (создать пакет managers) для управления ресурсами - BrokerTypeManager и BrokerManager
Необходимо разработать схему БД с учетом того, что приложение должно выполнять следующие функции:
Для этого в БД необходимо хранить информацию о брокерах и настройках подключения к ним, сообщения (вероятно, необходимо еще хранить и список адресатов). Поскольку сами сообщения могут быть большими (десятки мегабайт), необходимо сохранять их в файловой системе. Также для каждого сообщения необходимо хранить статус. Кроме того одно сообщение можно отправлять разным брокерам, поэтому это также нужно учесть при проектировании схемы.
Само приложение должно называться как и этот репо - cassete. Для SpringBoot есть инициализатор при работе инициализатора нужно сконфигурировать приложение т.о., чтобы оно использовало Gradle скрипт для сборки, СУБД Postgres, Liquibase (для миграции использовать консольную утилиту: https://github.com/Wissance/SpringUu/blob/master/tools/generateMigration.ps1).
При конфигурировании вариант для сборки через Gradle, но также нужно добавить сборку через maven и проверить, что приложение собирается в запускаемый jar (spring-boot-starter)
По аналогии с задачей #15 необходимо подготовить интерфейс и имплементацию (скоуп Request) для:
Параметры подключения к брокеру - передавать в конструкторе класса, имплементирующего интерфейс
В рамках данной задачи необходимо проверить гипотезу о работоспособности данных методов, а также рассмотреть/предложить другие варианты. Инструмент для отправки сообщений по расписанию будет описан в отдельной задаче
Для каждого entity-класса за исключением базовой entity необходимо реализовать набор DTO для последующего использования в контроллерах Web API:
Необходимо в пакете DTO добавить класс DtoTags для того, чтобы форматировать имена полей JSON в формате undderscore, например:
{
"broker_type": {
"id": 1,
"name": "kafka"
}
}
В данном компоненте должна выполняться работа с отдельными брокерами сообщений внутри Callable-воркеров, которым на вход передаются данные необходимые для:
Данный компонент, вероятно, должен быть синглтоном, внутри него должен выполняться регулярный поток, завершающийся вместе с приложением. Этот компонент работает следующим образом : проверяет наличие сообщений, которые нужно отправить (ну или анализирует расписание отправки и текущее время), если сообщения есть использует один из ранее созданных воркеров (их число должно быть ограничено настройками) , выбирает свободный воркер и передает в него всю нужную информацию, а воркер в свою очередь выполняет отправку сообщения
После завершения реализации DTO необходимо подготовить:
Требования к методам:
GET /api/account для получения коллекции учетных записей (УЗ), хеши возвращать не нужно
GET /api/account/id для получения УЗ по id
POST /api/account для создания УЗ (здесь мы передаем пароль в открытом виде)
PUT /api/account/id для редактирования УЗ (здесь мы передаем пароль в открытом виде)
DELETE /api/account/{id} для удаления УЗ, при удалении брокер не должен удаляться
При создании, обновлении и удалении УЗ все операции необходимо вынести в класс -менеджер (создать пакет managers) AccountManager
Также нужно создать класс сервис, выполняющий генерацию хэша, хэш не хуже HmacSha256, но можем рассмотреть и др. варианты. Кроме того в приложении должна задаваться приправа в application_{profilename}.yml и дефолтная приправа в application.yml. работает это так: сохраняемый в БД хэш = приправа + хэш пароля
Необходимо реализовать тесты в отдельном профиле (functests) - application-functests.yml (ЭТУ ЗАДАЧУ РЕАЛИЗОВАТЬ ПОСЛЕ РЕАЛИЗАЦИИ ПРОФИЛЕЙ)
Методология работы тестов должна быть следующей при КАЖДОМ тесте:
Необходимо создать интерфейс и имплементацию со скоупом Request
ДАННЫЙ ИНТЕРФЕЙС является ПРЕДПОЛОЖИТЕЛЬНЫМ и, ВОЗМОЖНО, он что-то не учитывает. В любом случае необходимо проанализировать какие возможности у нас есть для управления самим брокером и отправки и получения сообщений
public interface IKafkaMessageBroker {
// Управление топиками
List<TopicInfo> getAllTopic();
TopicInfo createTopic(String name);
Boolean deleteTopic(String name);
updateTopic(String oldName, String newName);
Long countTopicMessages(String topicName);
// Интерфейс чтения и отправки сообщений
Boolean send(List<String> topics, String message);
Boolean sendBroadcast(String message);
MessageData receive(String topicName, Long number, Booleab deleteOnReceive);
}
где:
Нам не подойдет использование Kafka из spring, т.к. в любой момент времени мы можем иметь сколько угодно подключений к разным брокерам Kafka (насколько я понял в Spring мы можем использовать только один).
Для управления брокером сообщений необходимо использовать Kafka Admin API (пример смотри здесь - https://www.logicbig.com/tutorials/misc/kafka/admin-api-getting-started.html)
Параметры подключения к брокеру - передавать в конструкторе класса, имплементирующего интерфейс
В рамках данной задачи необходимо проверить гипотезу о работоспособности данных методов, а также рассмотреть/предложить другие варианты. Инструмент для отправки сообщений по расписанию будет описан в отдельной задаче
Необходимо добавить возможность конфигурирования приложения черз yml файлы, при этом наиболее общие настройки должны быть вынесены в src\main\resources\application.yml, а более специфичные в src\main\resources\application_{profilename}.yml
У нас будут следующие профили ({profilename}):
Необходимо проверить, что при старте приложения подхватывается нужный профиль, для этого предлагается создать дополнительный api контроллер InfoController (/api/info) и реализовать в нем метод GET /api/info
Этот метод должен возвращать на данном этапе следующую информацию:
Также в рамках этой задачи необходимо подготовить DTO - ApplicationInfoDto в пакете dto и фабрику ApplicationInfoFactory
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.