Abstracting Services in Ruby
Objectives
- Simplify service/client definitions.
- Anticipate new encoding, delivery and security requirements.
- Separate request/response encoding and delivery for composition.
- Elide deployment decisions.
- Integrate diagnostics and logging.
- Simplify integration testing.
Features
- One-way and two-way requests as Module or instance methods.
- Request support:
- Delayed requests.
- Request meta-data: UUID, Timestamp.
- Support for multiple request/response transports:
- File.
- Named Pipe.
-
TCP.
-
HTTP under WEBrick or as Rack application.
- Beanstalkd. (gem asir_beanstalk)
- ZeroMQ. (gem asir_zmq)
- Resque. (gem asir_resque)
- Buffered transports.
- Broadcast transports.
- Fallback transports.
- Database transports (e.g.: gem asir_activerecord)
- Time-decaying retry and polling logic.
- Support for multiple encodings:
- Marshal.
-
XML. (gem asir_xml)
-
JSON. (gem asir_json)
-
YAML.
- Base64.
- ZLib.
- Chained encodings.
- Signed payloads.
Platform support
- CRuby 1.8.7
- CRuby 1.9.3-head
- CRuby 2.0-head
- Rubinius 1.8 and 1.9 modes.
- JRuby 1.6.x (with JRUBY_OPTS=—1.9) IN-PROGRESS