ruststream 0.7.0-rc.10

Async messaging framework for Rust: broker-agnostic traits, router, codecs, and a conformance harness for broker authors.
Documentation
# Установка

RustStream поставляется одним крейтом `ruststream`, поверхность которого включается аддитивными
фичами cargo. Добавьте его в `Cargo.toml`:

```toml
[dependencies]
ruststream = { version = "0.7", features = ["macros", "memory", "json"] }
serde = { version = "1", features = ["derive"] }
```

`serde` - прямая зависимость вашего сервиса, потому что ваши типы сообщений выводят
`Deserialize` / `Serialize`.

!!! note "Редакция и MSRV"
    RustStream рассчитан на **редакцию 2024** и минимальную версию Rust **1.88**. Пропишите
    `edition = "2024"` в своём `Cargo.toml`.
    Крейту брокера может понадобиться более свежая версия Rust, чем ядру, если её требует
    клиентская библиотека. Точную границу указывает поле `rust-version` крейта брокера.

## Фичи

Трейты ядра, объект приложения `RustStream`, `Router`, middleware и диспетчеризация сообщений
подписчикам компилируются всегда. Всё остальное - аддитивные фичи, которые вы включаете по
необходимости.

| Фича | Зависимости | Что даёт |
|---|---|---|
| `json` *(по умолчанию)* | serde_json | `JsonCodec` |
| `msgpack` | rmp-serde | `MsgpackCodec` |
| `cbor` | ciborium | `CborCodec` |
| `memory` | - | `MemoryBroker`, эталонный in-memory брокер |
| `macros` | ruststream-macros | `#[subscriber]`, `#[ruststream::app]` и derive-макросы (`Outgoing`, `OutSlot`, `OutMessages`, `Deserialized`, `Serialized`, `FromRef`, `MessageInfo`) |
| `asyncapi` | schemars, serde_norway | генерация AsyncAPI и HTML-просмотрщик |
| `metrics` | prometheus | middleware и экспортёр Prometheus |
| `logging` | tracing-subscriber | `ruststream::logging`, цветной консольный логгер ([Логирование]https://docs.rs/ruststream/latest/ruststream/logging/index.html) |
| `otel` | opentelemetry, opentelemetry-otlp | экспорт трасс и метрик по OTLP и передача trace-context по W3C ([OpenTelemetry]https://docs.rs/ruststream/latest/ruststream/otel/index.html) |
| `testing` | inventory | `TestApp` и построители утверждений ([Тестирование]https://docs.rs/ruststream/latest/ruststream/testing/index.html) |
| `conformance` | inventory | обвязка conformance для авторов брокеров |
| `cli` | clap, anyhow | бинарник `ruststream` |

В сервисе можно включить сразу несколько кодеков (см. [Кодеки](https://docs.rs/ruststream/latest/ruststream/codec/index.html)). Чтобы убрать
встроенный JSON-кодек (например, в крейте брокера, которому нужны только трейты и рантайм),
отключите фичи по умолчанию:

```toml
[dependencies]
ruststream = { version = "0.7", default-features = false }
```

## CLI

Бинарник `ruststream` поставляется вместе с крейтом за фичей cargo `cli`. Он вызывает `cargo` с
подкомандами фреймворка (`run`, `asyncapi gen`); установка и команды описаны в
модуле [`runtime::cli`](https://docs.rs/ruststream/latest/ruststream/runtime/cli/index.html). Заготовку нового проекта создаёт `cargo generate` по
шаблону, о чём рассказано в [быстром старте](quickstart.md).

## Конкретные брокеры

Брокер `memory` встроен в крейт и не требует внешнего сервиса. Чтобы работать с брокером за
пределами процесса, подключите крейт этого брокера: он реэкспортирует из `ruststream` всё, что ему
нужно.

У каждого брокера своя версия и свой цикл выпуска, поэтому точную строку зависимости - с текущей
версией и фичей `testing` для тестов обработчиков - смотрите в его собственной документации. Там же
описаны параметры подключения и список совместимостей.

Доступные брокеры перечислены в разделе [Брокеры](../brokers/index.md); оттуда ведёт ссылка на
документацию каждого из них с инструкцией по установке. Если вы пишете свой брокер, смотрите
[Авторам брокеров](../broker-authors/index.md).