Method: Natsy::Client.start!
- Defined in:
- lib/natsy/client.rb
.start! ⇒ Object
Start listening for messages with the Natsy::Client::start! method. This will spin up a non-blocking thread that subscribes to subjects (as specified by invocation(s) of ::reply_to) and waits for messages to come in. When a message is received, the appropriate ::reply_to block will be used to compute a response, and that response will be published.
NOTE: If an error is raised in one of the handlers, Natsy::Client will restart automatically.
NOTE: You can invoke ::reply_to to create additional message subscriptions after Natsy::Client.start!, but be aware that this forces the client to restart. You may see (benign, already-handled) errors in the logs generated when this restart happens. It will force the client to restart and re-subscribe after _each additional ::reply_to invoked after ::start!._ So, if you have a lot of additional ::reply_to invocations, you may want to consider refactoring so that your call to Natsy::Client.start! occurs after those additions.
NOTE: The ::start! method can be safely called multiple times; only the first will be honored, and any subsequent calls to ::start! after the client is already started will do nothing (except write a _“NATS is already running”_ log to the logger at the DEBUG level).
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/natsy/client.rb', line 95 def start! log("Starting NATS", level: :debug) if started? log("NATS is already running", level: :debug) return end started! thread = Thread.new do Thread.handle_interrupt(StandardError => :never) do Thread.handle_interrupt(StandardError => :immediate) { listen } rescue NATS::ConnectError => e log("Could not connect to NATS server:", level: :error) log(e., level: :error, indent: 2) Thread.current.exit rescue NewSubscriptionsError => _e log("New subscriptions! Restarting...", level: :info) restart! Thread.current.exit # raise e # TODO: there has to be a better way rescue StandardError => e log("Encountered an error:", level: :error) log(e., level: :error, indent: 2) restart! Thread.current.exit # raise e end end threads << thread end |