An open API service indexing awesome lists of open source software.

https://github.com/ashenblade/taskflux

Отказоустойчивый распределенный менеджер очередей сообщений с приоритетами
https://github.com/ashenblade/taskflux

csharp dotnet fault-tolerance queue-manager raft raft-consensus-algorithm

Last synced: 10 months ago
JSON representation

Отказоустойчивый распределенный менеджер очередей сообщений с приоритетами

Awesome Lists containing this project

README

          

![Лого](./logo.svg)

TaskFlux - это распределенный менеджер приоритетных очередей, построенный с упором в отказоустойчивость.

- [Что такое TaskFlux](#что-такое-taskflux)
- [Функциональность](#функциональность)
- [Документация](#документация)
- [Взаимодействие](#библиотеки-взаимодействия)
- [Начало работы](#разворачивание)
- [Вложиться в проект](#вложиться-в-проект)
- [Лицензия](#лицензия)

## Что такое TaskFlux

`TaskFlux` - менеджер приоритетных очередей.
Как обычный менеджер очередей, только каждое _сообщение имеет свой приоритет_.

Создан с упором на отказоустойчивость и работу в контейнерах.

За счет своей расширяемости может использоваться в самых различных приложениях.

## Функциональность

Функциональность приложения:

1. Чтение сообщений в зависимости от приоритета
2. Динамическое создание и удаление очередей
3. Выбор реализации приоритетной очереди
4. Ограничения на операции с очередью (см. [политики очередей](./docs/queue-policies.md))
5. Чтение с ожиданием
6. Механизм подтверждений

Что еще полезно:

1. Запуск в кластере
2. Возможность конфигурирования различных аспектов поведения
3. Метрики в формате Prometheus
4. Множество интерфейсов взаимодействия клиентов

## Документация

Ознакомиться с функциональностью можно на страницах:

- [Очереди](./docs/queue.md)
- [Политики очереди](./docs/queue-policies.md)

Документация, касательно использования:

- [Установка](./docs/installation.md)
- [Конфигурирование](./docs/configuration.md)
- [Хранение данных](./docs/persistence.md)
- [Эксплуатация](./docs/maintenance.md) (логирование, мониторинг и т.п.)

Для разработчиков (и кому интересно покопаться):

- [Клиент-серверный протокол](./docs/developer/client-network-protocol.md)
- [Протокол узлов кластера](./docs/developer/inter-node-network-protocol.md)
- [Структура файлов](./docs/developer/file-structure.md)
- [Архитектура и код](./docs/developer/architecture.md)

## Взаимодействие

Приложение поддерживает несколько интерфейсов взаимодействия:

### HTTP

Можно взаимодействовать по HTTP протоколу.
Для этого имеется специальный REST интерфейс.

### Бинарный протокол

У приложения имеется собственный клиент-серверный протокол, построенный поверх TCP.
Его работа описана на [этой странице](./docs/developer/client-network-protocol.md) документации.

На данный момент существует реализация для языка C#.
Пример использования в проекте [интерактивного клиента](./samples/InteractiveConsole).
Сама библиотека расположена в
проекте [TaskFlux.Transport.Tcp.Client](./src/TaskFlux.Transport/TaskFlux.Transport.Tcp.Client) (пока не опубликована в
NuGet).

### gRPC

Имеется поддержка gRPC протокола.
Сервис описан в [этом proto-файле](./src/TaskFlux.Transport/TaskFlux.Transport.Grpc/Proto/taskflux.proto).

## Начало работы

Чтобы попробовать проект:

1. Склонируй git репозиторий проекта

```shell
git clone https://github.com/ashenBlade/TaskFlux.git
cd TaskFlux
```

2. Запусти docker-compose в корне репозитория

```shell
docker compose -f docker-compose.yaml up -d
```

Готово! Сервер запущен.

3. Для тестирования можно запустить консольный клиент

```shell
dotnet run --project samples/InteractiveConsole localhost:9000
```

О более подробных инструкциях в
документации: [установка](./docs/installation.md), [конфигурация](./docs/configuration.md)

## Вложиться в проект

Разработка ведется в ветках `feature`.
В ветке `master` расположен готовый к работе код.

Если есть предложения по функциональности - создай новый [Issue](https://github.com/ashenBlade/TaskFlux/issues/new)

## Лицензия

Проект опубликован под лицензией Apache 2.0.
Больше о лицензии в [LICENCE](./LICENSE.md)