Координировать очередь и темы в Rust? - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь реализовать следующий поток в Rust: Threaded flow

  1. запись (JSON) отправлена ​​веб-слушателю Actix и обработана
  2. запись отправляется в «наблюдаемую очередь»
  3. Веб-клиент Actix получает уведомление
  4. Клиент отправляет ее (через HTTP) бэкэнду. Это может произойти сбой
  5. Если произошел сбой, запись передается «таймеру», если эта отправка не удалась менее 10 раз
  6. Через 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. Как мне лучше всего передать адрес. Глобальные переменные, кажется, не являются ответом.

Текущий Основная функция

Помощь очень ценится

...