gearman-worker-rs icon indicating copy to clipboard operation
gearman-worker-rs copied to clipboard

High level library to implement Gearman workers

Gearman Worker Library for Rust

Status: Alpha Build Status

High level library to implement Gearman workers.

Install

Add this dependency to your Cargo.toml

gearman-worker = "*"

Usage

extern crate gearman_worker;

use gearman_worker::Worker;

fn main() {
    let server_addr = "127.0.0.1:4730".parse().unwrap();

    let mut worker = WorkerBuilder::new("my-worker-rs-1", server_addr).build();
    worker.connect().unwrap();

    worker.register_function("greet", |input| {
        let hello = String::from_utf8_lossy(input);
        let response = format!("{} world!", hello);
        Ok(response.into_bytes())
    }).unwrap();

    worker.run().unwrap();
}

where the worker functions have the following signature:

Fn(&[u8]) -> Result<Vec<u8>, Option<Vec<u8>>>;

Known issues

This has not been tested yet with a real workload and the public interface will probably change in the future.

The worker runs in a single thread using blocking tcp connections. This is fine if you don't expect high concurrency and you can always spawn multiple separate processes to handle the workload but I plan on implementing multi-threading and non-blocking io (probably with tokio).

The following gearman operations are not currently supported but the typical use-case is implemented:

  • WORK_STATUS
  • CAN_DO_TIMEOUT
  • WORK_DATA
  • WORK_WARNING
  • GRAB_JOB_UNIQ
  • GRAB_JOB_ALL

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

This software is licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.