Introduction
sync_service is a library to create synchronous SOA daemons. It's built on top of the JSON/RPC protocol and can be deployed anywhere you deploy a Rack application.
Install
Requires ruby-1.9.3p0.
Then do:
$ gem install sync_service
Hosting a Service
A service is just any Ruby object that descends from SyncService::Base
. Any public method in the object is automatically exposed via SOA.
require "sync_service"
class Application < SyncService::Base
@service_name = "mobme.infrastructure.rpc.test"
def
Time.now.to_i
end
def buggy_method
raise MobME::Infrastructure::RPC::Error, "This exception is expected."
end
def method_missing(name, *args)
logger.err "[SERVER] received method #{name} with #{args.inspect}"
end
end
To expose the Application, you can either create a standalone server and run it via SyncService::Runner
:
require 'sync_service'
require_relative 'application'
SyncService::Runner.start Application.new, '0.0.0.0', 8080, '/test_application'
or make a simple config.ru via SyncService::Adaptor:
require 'sync_service'
require Pathname.new(File.dirname(__FILE__)).join('application')
map("/test_application") do
run SyncService::Adaptor.new(Application.new)
end
Consuming a Service
To consume services, use SyncService::Client
:
require "sync_service"
RPC.logging = true
client = SyncService::Client.setup("http://127.0.0.1:8080/test_application")
# Get result of an existing method.
puts "Server timestamp is #{client.}"
You can see the complete example in the examples/ folder.