module Altaire::Gateway
Public Class Methods
provide(subject, queue: "provider", interruptable: false, &block)
click to toggle source
# File lib/altaire/gateway.rb, line 18 def self.provide (subject, queue: "provider", interruptable: false, &block) NATS.subscribe subject, queue: queue do |msg, reply| msg = JSON.parse(msg) thread = Thread.new do NATS.publish reply, { result: block.(msg) }.to_json rescue => e NATS.publish reply, { error: e.message }.to_json ensure @requests.delete(msg["id"]) end @requests[msg["id"]] = thread if interruptable end end
start(urls, &block)
click to toggle source
# File lib/altaire/gateway.rb, line 7 def self.start (urls, &block) NATS.start servers: [urls].flatten do @requests = {} NATS.subscribe "meta.cancel" do |msg| @requests[msg.to_i].raise(Interrupt, "Cancelled by gateway") rescue Exception end block.(self) end end