Как создать актера, который ждет нескольких сообщений или тайм-аута? - PullRequest
0 голосов
/ 03 июня 2019

Я использую MongoDB, Actix и Actix-Web. У меня есть маршрут POST, который получает некоторые данные; Я анализирую эти данные и отправляю их актеру Actix, который вставляет их в MongoDB.

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

#[derive(Message)]
pub struct BsonObject {
    pub bson: mongodb::Bson,
}

pub struct DbExecutor {
    pub db: Arc<DatabaseInner>,
}

impl Actor for DbExecutor {
    type Context = Context<Self>;
}

impl Handler<BsonObject> for DbExecutor {
    type Result = ();

    fn handle(&mut self, msg: BsonObject, _: &mut Self::Context) -> Self::Result {
        let bson = msg.bson;
        match bson {
            mongodb::Bson::Null => eprintln!("cannot insert Null"),
            _ => {
                let _res = insert_record(self.db.clone(), bson);
            }
        };
    }
}

Как я могу это сделать?

...