Я пытаюсь реализовать следующий поток в Rust:
- запись (JSON) отправлена веб-слушателю Actix и обработана
- запись отправляется в «наблюдаемую очередь»
- Веб-клиент Actix получает уведомление
- Клиент отправляет ее (через HTTP) бэкэнду. Это может произойти сбой
- Если произошел сбой, запись передается «таймеру», если эта отправка не удалась менее 10 раз
- Через 30 секунд таймер повторно отправляет запись в очередь и поток возобновляет в 3
Я решил, что с использованием vert.x и Java ( GitHub project ) и хочу использовать его в качестве примера проекта обучения Rust.
Обновление:
Найдена документация actix и реализовано и Actix :: Actor, которая охватывает 1-> 4
use crate::comments_entry::BlogSubmission;
use actix::prelude::*;
pub struct CommentStore {}
impl Actor for CommentStore {
type Context = Context<Self>;
}
impl Handler<BlogSubmission> for CommentStore {
type Result = String;
fn handle(&mut self, _msg: BlogSubmission, _ctx: &mut Context<Self>) -> Self::Result {
// Here goes #4 send to backebd
println!("{:?}", _msg);
"It worked".to_string()
}
}
Что сужает мои вопросы по существу:
- Как я могу построить таймер задержки?
- Когда я запускаю актера в моем методе
main()
, который также запускает веб-сервер, используя let c_store = CommentStore::start(CommentStore {});
, я получаю Адрес актера в c_store
. Однако мне нужно отправить актеру одну из функций asyn c, указанных в качестве целей Route. Как мне лучше всего передать адрес. Глобальные переменные, кажется, не являются ответом.
Текущий Основная функция
Помощь очень ценится