-
Notifications
You must be signed in to change notification settings - Fork 30
/
basic-usage.rb
64 lines (52 loc) · 1.89 KB
/
basic-usage.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright 2016-2018 The NATS Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require 'nats/io/client'
nats = NATS::IO::Client.new
nats.connect(servers: ["nats://127.0.0.1:4222"])
puts "Connected to #{nats.connected_server}"
# Simple subscriber
nats.subscribe("foo.>") { |msg, reply, subject| puts "[Received] on '#{subject}': '#{msg}'" }
# Simple Publisher
nats.publish('foo.bar.baz', 'Hello World!')
# Unsubscribing
sid = nats.subscribe('bar') { |msg| puts "Received : '#{msg}'" }
nats.unsubscribe(sid)
# Subscribers which reply to requests
nats.subscribe('help') do |msg, reply, subject|
puts "[Received] on '#{subject}' #{reply}: '#{msg}'"
nats.publish(reply, "I'll help!") if reply
end
nats.subscribe('>') do |msg, reply, subject|
puts "[Received] via wildcard on '#{subject}' #{reply}: '#{msg}'"
nats.publish(reply, "Hi") if reply
end
# Requests happens asynchronously if given a callback
nats.request('help', 'world', max: 2) do |response|
puts "[Response] '#{response}'"
end
# Request without a callback waits for the response or times out.
begin
msg = nats.request('help', 'please', timeout: 1.0)
puts "[Response] '#{msg.subject}': #{msg.data}"
rescue NATS::IO::Timeout
puts "nats: request timed out"
end
# Server roundtrip which fails if it does not happen within 500ms
begin
nats.flush(0.5)
rescue NATS::IO::Timeout
puts "nats: flush timeout"
end
# Closes connection to NATS
nats.close