1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
//! Job queueing and processing library with queues stored in Postgres 9.5+ //! //! # Example //! //! ```no_run //! extern crate dbq; //! extern crate postgres; //! extern crate serde_json; //! //! use std::error::Error; //! use std::result::Result; //! use std::thread; //! use std::time::Duration; //! //! // A simple handler that prints "Hello!" for any job it runs //! #[derive(Clone)] //! struct HelloHandler {} //! //! fn main() -> Result<(), Box<Error>> { //! let db_conn_params = "postgres://postgres:password@localhost/db"; //! let conn = postgres::Connection::connect(db_conn_params, postgres::TlsMode::None)?; //! //! // Schema config allows for changing the database schema and table names //! // Defaults are no schema (default is used) and tables are prefixed with "dbq_" //! let schema_config = dbq::SchemaConfig::default(); //! // Run the migrations on start. Migrations are idempotent and should be run //! // on startup //! dbq::run_migrations(&schema_config, &conn, Some(646_271)).unwrap(); //! //! let queue = dbq::Queue::new(schema_config, "de_lancie_q".to_string()); //! //! // Enqueue a job //! queue.enqueue("job_a", serde_json::Value::Null, 3, &conn)?; //! //! // Start a worker pool //! let workers_config = //! dbq::WorkerPoolConfig::new(queue, db_conn_params, HelloHandler {})?; //! let workers = dbq::WorkerPool::start(workers_config); //! //! // Give a worker time to find and start the job //! thread::sleep(Duration::new(1, 0)); //! // Shutdown the worker pool waiting for all currently executing jobs to finish //! workers.join(); //! Ok(()) //! } //! //! impl dbq::Handler for HelloHandler { //! type Error = std::io::Error; //! //! fn handle(&self, _ctx: dbq::JobContext) -> Result<(), Self::Error> { //! println!("Hello!"); //! Ok(()) //! } //! } //! ``` #[macro_use] extern crate crossbeam_channel; #[macro_use] extern crate log; mod error; mod job; mod queue; mod schema; mod worker; pub use error::*; pub use job::*; pub use queue::*; pub use schema::*; pub use worker::*;