Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Быстрый старт

Самый быстрый путь к работающему сервису - сгенерировать заготовку через cargo generate.

Заготовка проекта​

cargo install cargo-generate
cargo generate --git https://github.com/powersemmi/ruststream templates/memory --name my-service
cd my-service

Для генерации нужен только cargo generate. templates/memory - стартовый шаблон на in-memory брокере. Шаблон из адаптации библиотеки брокера разворачивается так же: указывают репозиторий адаптации и путь к шаблону (например, --git https://github.com/powersemmi/ruststream-nats templates/nats); какие шаблоны есть у адаптации, сказано в её собственной документации. cargo generate создаёт идиоматичный проект из нескольких файлов:

my-service/
├── Cargo.toml
└── src/
├── main.rs # #[ruststream::app] строит сервис и монтирует роутер
├── orders.rs # обработчики как функции #[subscriber] (один публикует ответ)
└── routes.rs # собирает обработчики в Router

Запуск​

#[ruststream::app] генерирует main, поэтому бинарник уже понимает команды фреймворка:

cargo run -- run # или: ruststream run, если установлен CLI

cargo run -- run запускает рантайм tokio. Сервис работает, пока вы не нажмёте Ctrl+C. Брокер очереди для запуска не нужен. Шаблон включает фичу logging, поэтому сервис выводит журнал в терминал, а обработчики пишут в него через tracing.

Генерация AsyncAPI-документа​

cargo run -- asyncapi gen

Команда печатает AsyncAPI-документ в формате JSON. Флаги вывода (-o, --yaml) и сам документ разобраны в модуле asyncapi.

Как выглядит точка входа​

Точка входа - это функция, которая собирает сервис: подключает брокер и монтирует на нём роутер. #[ruststream::app] превращает её в main.

src/main.rs
mod orders;
mod routes;

use ruststream::memory::MemoryBroker;
use ruststream::runtime::{AppInfo, RustStream};

#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("orders-service", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
let router = routes::orders();
b.include_router(router);
})
}

Что дальше​

  • Учебник разбирает каждую часть сервиса.
  • Подписчики описывают все формы обработчиков.
  • CLI управляет сервисом из командной строки.