2023-03-04 19:46:09 +00:00
|
|
|
use fang::queue::PgAsyncQueue;
|
2023-03-04 18:07:17 +00:00
|
|
|
use fang::queue::AsyncQueueable;
|
|
|
|
use fang::worker_pool::AsyncWorkerPool;
|
|
|
|
use fang::runnable::AsyncRunnable;
|
2022-08-04 15:22:53 +00:00
|
|
|
use simple_async_worker::MyFailingTask;
|
2022-07-31 13:32:37 +00:00
|
|
|
use simple_async_worker::MyTask;
|
|
|
|
use std::time::Duration;
|
2023-03-04 18:07:17 +00:00
|
|
|
use diesel_async::pg::AsyncPgConnection;
|
|
|
|
use diesel_async::pooled_connection::{bb8::Pool, AsyncDieselConnectionManager};
|
|
|
|
use diesel::PgConnection;
|
2022-07-31 13:32:37 +00:00
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
|
|
|
env_logger::init();
|
|
|
|
|
2023-03-04 18:07:17 +00:00
|
|
|
let connection_url = "postgres://postgres:password@localhost/fang";
|
|
|
|
|
2022-07-31 13:32:37 +00:00
|
|
|
log::info!("Starting...");
|
2022-08-27 15:58:38 +00:00
|
|
|
let max_pool_size: u32 = 3;
|
2023-03-04 18:07:17 +00:00
|
|
|
let manager = AsyncDieselConnectionManager::<AsyncPgConnection>::new(connection_url);
|
|
|
|
let pool = Pool::builder()
|
|
|
|
.max_size(max_pool_size)
|
|
|
|
.min_idle(Some(1))
|
|
|
|
.build(manager)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
|
2023-03-04 19:46:09 +00:00
|
|
|
let mut queue = PgAsyncQueue::builder()
|
2023-03-04 18:07:17 +00:00
|
|
|
.pool(pool)
|
2022-08-01 19:37:32 +00:00
|
|
|
.build();
|
2022-07-31 13:32:37 +00:00
|
|
|
|
|
|
|
log::info!("Queue connected...");
|
|
|
|
|
2023-03-04 19:46:09 +00:00
|
|
|
let mut workers_pool: AsyncWorkerPool<PgAsyncQueue> = AsyncWorkerPool::builder()
|
2022-08-04 15:22:53 +00:00
|
|
|
.number_of_workers(10_u32)
|
2022-07-31 13:32:37 +00:00
|
|
|
.queue(queue.clone())
|
|
|
|
.build();
|
|
|
|
|
|
|
|
log::info!("Pool created ...");
|
|
|
|
|
2023-03-04 18:07:17 +00:00
|
|
|
workers_pool.start().await;
|
2022-07-31 13:32:37 +00:00
|
|
|
log::info!("Workers started ...");
|
|
|
|
|
|
|
|
let task1 = MyTask::new(0);
|
|
|
|
let task2 = MyTask::new(20_000);
|
2022-08-04 15:22:53 +00:00
|
|
|
let task3 = MyFailingTask::new(50_000);
|
2022-07-31 13:32:37 +00:00
|
|
|
|
2022-07-31 15:15:00 +00:00
|
|
|
queue
|
|
|
|
.insert_task(&task1 as &dyn AsyncRunnable)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2022-08-27 15:58:38 +00:00
|
|
|
|
2022-07-31 15:15:00 +00:00
|
|
|
queue
|
|
|
|
.insert_task(&task2 as &dyn AsyncRunnable)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2022-07-31 13:32:37 +00:00
|
|
|
|
2022-08-04 15:22:53 +00:00
|
|
|
queue
|
|
|
|
.insert_task(&task3 as &dyn AsyncRunnable)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
|
2022-07-31 13:32:37 +00:00
|
|
|
tokio::time::sleep(Duration::from_secs(100)).await;
|
|
|
|
}
|