nats 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +15 -0
- data/Rakefile +20 -6
- data/lib/nats/client.rb +21 -38
- data/lib/nats/ext/json.rb +7 -2
- data/lib/nats/server.rb +1 -1
- data/lib/nats/server/connection.rb +2 -1
- data/lib/nats/version.rb +3 -0
- data/nats.gemspec +5 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9001307af28148c669590f0964512c8ddc60cff4
|
4
|
+
data.tar.gz: 97ffb35dca621454dddcda8aad90d081b7d51520
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2aaddd687461480f22bd596d60d1b28cf10af716d011d2531e9e7f31f6b5391c9e67f33f494378c8d39c7973ae426bce6e93227e8ce65ec30d3988d045f02f1
|
7
|
+
data.tar.gz: 446229594e7a0f4aa88aba27e5e3f12abe8adffdde363674a7e464ed541567ed81370ef939a25c77d455051407078fd6dce73f89d310bb5e0bd5637c7e2b5032
|
data/HISTORY.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# HISTORY
|
2
2
|
|
3
|
+
## v0.6.0 (March 22, 2016)
|
4
|
+
- Removed distributing `nats-server` along with the gem
|
5
|
+
- Fixed issue with subscriptions not being sent on first reconnect (#94)
|
6
|
+
- Added loading Oj gem for JSON when supported (#91)
|
7
|
+
- Fixed removing warning message introduced by EM 1.0.8 (#90)
|
8
|
+
- Changed to testing spec with `gnatsd` (#95)
|
9
|
+
- See full list @ https://github.com/nats-io/ruby-nats/compare/v0.5.1...v0.6.0
|
10
|
+
|
11
|
+
## v0.5.1 (August 7, 2015)
|
12
|
+
- Changed to never remove servers when configured as such (#88)
|
13
|
+
- See full list @ https://github.com/nats-io/ruby-nats/compare/v0.5.0...v0.5.1
|
14
|
+
|
15
|
+
## v0.5.0 (June 19, 2015)
|
16
|
+
- See full list @ https://github.com/nats-io/ruby-nats/compare/v0.5.0.beta.16...v0.5.0
|
17
|
+
|
3
18
|
## v0.5.0.beta.16 (December 7, 2014)
|
4
19
|
- Resolved major issue on cluster connects to non-first server, issue #78
|
5
20
|
- Official Support for Ruby 2.1
|
data/Rakefile
CHANGED
@@ -1,12 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'rspec/core'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
desc 'Run specs from client and server'
|
6
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
7
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
8
|
+
spec.rspec_opts = ["--format", "documentation", "--colour"]
|
7
9
|
end
|
8
10
|
task :default => :spec
|
9
11
|
|
12
|
+
desc 'Run spec from client using gnatsd as the server'
|
13
|
+
RSpec::Core::RakeTask.new('spec:client') do |spec|
|
14
|
+
spec.pattern = FileList['spec/client/*_spec.rb']
|
15
|
+
spec.rspec_opts = ["--format", "documentation", "--colour"]
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Run spec from server'
|
19
|
+
RSpec::Core::RakeTask.new('spec:server') do |spec|
|
20
|
+
spec.pattern = FileList['spec/server/*_spec.rb']
|
21
|
+
spec.rspec_opts = ["--format", "documentation", "--colour"]
|
22
|
+
end
|
23
|
+
|
10
24
|
desc "Build the gem"
|
11
25
|
task :gem do
|
12
26
|
sh 'gem build *.gemspec'
|
data/lib/nats/client.rb
CHANGED
@@ -6,11 +6,10 @@ ep = File.expand_path(File.dirname(__FILE__))
|
|
6
6
|
require "#{ep}/ext/em"
|
7
7
|
require "#{ep}/ext/bytesize"
|
8
8
|
require "#{ep}/ext/json"
|
9
|
+
require "#{ep}/version"
|
9
10
|
|
10
11
|
module NATS
|
11
12
|
|
12
|
-
VERSION = "0.5.1".freeze
|
13
|
-
|
14
13
|
DEFAULT_PORT = 4222
|
15
14
|
DEFAULT_URI = "nats://localhost:#{DEFAULT_PORT}".freeze
|
16
15
|
|
@@ -43,6 +42,7 @@ module NATS
|
|
43
42
|
PING_REQUEST = ("PING#{CR_LF}".freeze) #:nodoc:
|
44
43
|
PONG_RESPONSE = ("PONG#{CR_LF}".freeze) #:nodoc:
|
45
44
|
|
45
|
+
SUB_OP = ('SUB'.freeze) #:nodoc:
|
46
46
|
EMPTY_MSG = (''.freeze) #:nodoc:
|
47
47
|
|
48
48
|
# Used for future pedantic Mode
|
@@ -53,13 +53,6 @@ module NATS
|
|
53
53
|
AWAITING_CONTROL_LINE = 1 #:nodoc:
|
54
54
|
AWAITING_MSG_PAYLOAD = 2 #:nodoc:
|
55
55
|
|
56
|
-
# Autostart properties
|
57
|
-
AUTOSTART_PID_FILE = '/tmp/nats-server.pid'
|
58
|
-
AUTOSTART_LOG_FILE = '/tmp/nats-server.log'
|
59
|
-
|
60
|
-
# Duplicate autostart protection
|
61
|
-
@@tried_autostart = {}
|
62
|
-
|
63
56
|
class Error < StandardError; end #:nodoc:
|
64
57
|
|
65
58
|
# When the NATS server sends us an ERROR message, this is raised/passed by default
|
@@ -82,12 +75,10 @@ module NATS
|
|
82
75
|
alias :reactor_was_running? :reactor_was_running
|
83
76
|
|
84
77
|
# Create and return a connection to the server with the given options.
|
85
|
-
# The server will be autostarted if requested and the <b>uri</b> is determined to be local.
|
86
78
|
# The optional block will be called when the connection has been completed.
|
87
79
|
#
|
88
80
|
# @param [Hash] opts
|
89
81
|
# @option opts [String|URI] :uri The URI to connect to, example nats://localhost:4222
|
90
|
-
# @option opts [Boolean] :autostart Boolean that can be used to engage server autostart functionality.
|
91
82
|
# @option opts [Boolean] :reconnect Boolean that can be used to suppress reconnect functionality.
|
92
83
|
# @option opts [Boolean] :debug Boolean that can be used to output additional debug information.
|
93
84
|
# @option opts [Boolean] :verbose Boolean that is sent to server for setting verbose protocol mode.
|
@@ -136,7 +127,6 @@ module NATS
|
|
136
127
|
end
|
137
128
|
|
138
129
|
@err_cb = proc { |e| raise e } unless err_cb
|
139
|
-
check_autostart(@uri) if opts[:autostart] == true
|
140
130
|
|
141
131
|
client = EM.connect(@uri.host, @uri.port, self, opts)
|
142
132
|
client.on_connect(&blk) if blk
|
@@ -151,7 +141,13 @@ module NATS
|
|
151
141
|
raise(Error, "EM needs to be running when NATS.start is called without a run block")
|
152
142
|
end
|
153
143
|
# Setup optimized select versions
|
154
|
-
EM.epoll
|
144
|
+
if EM.epoll?
|
145
|
+
EM.epoll
|
146
|
+
elsif EM.kqueue?
|
147
|
+
EM.kqueue
|
148
|
+
else
|
149
|
+
Kernel.warn('Neither epoll nor kqueue are supported')
|
150
|
+
end
|
155
151
|
EM.run { @client = connect(*args, &blk) }
|
156
152
|
end
|
157
153
|
|
@@ -160,7 +156,6 @@ module NATS
|
|
160
156
|
def stop(&blk)
|
161
157
|
client.close if (client and (client.connected? || client.reconnecting?))
|
162
158
|
blk.call if blk
|
163
|
-
@@tried_autostart = {}
|
164
159
|
@err_cb = nil
|
165
160
|
end
|
166
161
|
|
@@ -278,29 +273,10 @@ module NATS
|
|
278
273
|
|
279
274
|
private
|
280
275
|
|
281
|
-
def check_autostart(uri)
|
282
|
-
return if uri_is_remote?(uri) || @@tried_autostart[uri]
|
283
|
-
@@tried_autostart[uri] = true
|
284
|
-
return if server_running?(uri)
|
285
|
-
return unless try_autostart_succeeded?(uri)
|
286
|
-
wait_for_server(uri)
|
287
|
-
end
|
288
|
-
|
289
276
|
def uri_is_remote?(uri)
|
290
277
|
uri.host != 'localhost' && uri.host != '127.0.0.1'
|
291
278
|
end
|
292
279
|
|
293
|
-
def try_autostart_succeeded?(uri)
|
294
|
-
port_arg = "-p #{uri.port}"
|
295
|
-
user_arg = "--user #{uri.user}" if uri.user
|
296
|
-
pass_arg = "--pass #{uri.password}" if uri.password
|
297
|
-
log_arg = "-l #{AUTOSTART_LOG_FILE}"
|
298
|
-
pid_arg = "-P #{AUTOSTART_PID_FILE}"
|
299
|
-
# daemon mode to release client
|
300
|
-
`nats-server #{port_arg} #{user_arg} #{pass_arg} #{log_arg} #{pid_arg} -d 2> /dev/null`
|
301
|
-
$? == 0
|
302
|
-
end
|
303
|
-
|
304
280
|
end
|
305
281
|
|
306
282
|
attr_reader :connected, :connect_cb, :err_cb, :err_cb_overridden, :pongs_received #:nodoc:
|
@@ -314,7 +290,9 @@ module NATS
|
|
314
290
|
def initialize(options)
|
315
291
|
@options = options
|
316
292
|
process_uri_options
|
293
|
+
@ssl = false
|
317
294
|
@ssl = options[:ssl] if options[:ssl]
|
295
|
+
@buf = nil
|
318
296
|
@ssid, @subs = 1, {}
|
319
297
|
@err_cb = NATS.err_cb
|
320
298
|
@reconnect_timer, @needed = nil, nil
|
@@ -584,7 +562,11 @@ module NATS
|
|
584
562
|
end
|
585
563
|
|
586
564
|
def process_info(info) #:nodoc:
|
587
|
-
|
565
|
+
# Each JSON parser uses a different key/value pair to use symbol keys
|
566
|
+
# instead of strings when parsing. Passing all three pairs assures each
|
567
|
+
# parser gets what it needs. For the json gem :symbolize_name, for yajl
|
568
|
+
# :symbolize_keys, and for oj :symbol_keys.
|
569
|
+
@server_info = JSON.parse(info, :symbolize_keys => true, :symbolize_names => true, :symbol_keys => true)
|
588
570
|
if @server_info[:ssl_required] && @ssl
|
589
571
|
start_tls
|
590
572
|
else
|
@@ -621,11 +603,12 @@ module NATS
|
|
621
603
|
current = server_pool.first
|
622
604
|
current[:was_connected] = true
|
623
605
|
current[:reconnect_attempts] = 0
|
606
|
+
cancel_reconnect_timer if reconnecting?
|
624
607
|
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
608
|
+
# whip through any pending SUB commands since we replay
|
609
|
+
# all subscriptions already done anyway.
|
610
|
+
@pending.delete_if { |sub| sub[0..2] == SUB_OP }
|
611
|
+
@subs.each_pair { |k, v| send_command("SUB #{v[:subject]} #{v[:queue]} #{k}#{CR_LF}") }
|
629
612
|
|
630
613
|
unless user_err_cb? or reconnecting?
|
631
614
|
@err_cb = proc { |e| raise e }
|
data/lib/nats/ext/json.rb
CHANGED
data/lib/nats/server.rb
CHANGED
@@ -26,7 +26,7 @@ NATSD::Server.setup(ARGV.dup)
|
|
26
26
|
# Event Loop
|
27
27
|
EM.run do
|
28
28
|
|
29
|
-
log "WARNING: nats-server is deprecated and no longer supported. It will be removed in a future release. See https://github.com/
|
29
|
+
log "WARNING: nats-server is deprecated and no longer supported. It will be removed in a future release. See https://github.com/nats-io/gnatsd"
|
30
30
|
log "Starting #{NATSD::APP_NAME} version #{NATSD::VERSION} on port #{NATSD::Server.port}"
|
31
31
|
log "TLS/SSL Support Enabled" if NATSD::Server.options[:ssl]
|
32
32
|
begin
|
@@ -20,7 +20,8 @@ module NATSD #:nodoc: all
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def client_info
|
23
|
-
|
23
|
+
cur_peername = get_peername
|
24
|
+
@client_info ||= (cur_peername.nil? ? 'N/A' : Socket.unpack_sockaddr_in(cur_peername))
|
24
25
|
end
|
25
26
|
|
26
27
|
def info
|
data/lib/nats/version.rb
ADDED
data/nats.gemspec
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
lib = File.expand_path('../lib/', __FILE__)
|
4
4
|
$:.unshift lib unless $:.include?(lib)
|
5
5
|
|
6
|
-
require 'nats/
|
6
|
+
require 'nats/version'
|
7
7
|
|
8
8
|
spec = Gem::Specification.new do |s|
|
9
9
|
s.name = 'nats'
|
10
|
-
s.version =
|
10
|
+
s.version = NATS::VERSION
|
11
11
|
s.summary = 'NATS is an open-source, high-performance, lightweight cloud messaging system.'
|
12
12
|
s.homepage = 'https://nats.io'
|
13
13
|
s.description = 'NATS is an open-source, high-performance, lightweight cloud messaging system.'
|
@@ -24,7 +24,7 @@ spec = Gem::Specification.new do |s|
|
|
24
24
|
|
25
25
|
s.require_paths = ['lib']
|
26
26
|
s.bindir = 'bin'
|
27
|
-
s.executables = [
|
27
|
+
s.executables = ['nats-pub', 'nats-sub', 'nats-queue', 'nats-top', 'nats-request']
|
28
28
|
|
29
29
|
s.files = %w[
|
30
30
|
COPYING
|
@@ -39,6 +39,7 @@ spec = Gem::Specification.new do |s|
|
|
39
39
|
bin/nats-top
|
40
40
|
bin/nats-request
|
41
41
|
lib/nats/client.rb
|
42
|
+
lib/nats/version.rb
|
42
43
|
lib/nats/ext/bytesize.rb
|
43
44
|
lib/nats/ext/em.rb
|
44
45
|
lib/nats/ext/json.rb
|
@@ -55,4 +56,4 @@ spec = Gem::Specification.new do |s|
|
|
55
56
|
lib/nats/server/connz.rb
|
56
57
|
]
|
57
58
|
|
58
|
-
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Collison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -95,7 +95,6 @@ description: NATS is an open-source, high-performance, lightweight cloud messagi
|
|
95
95
|
email:
|
96
96
|
- derek.collison@gmail.com
|
97
97
|
executables:
|
98
|
-
- nats-server
|
99
98
|
- nats-pub
|
100
99
|
- nats-sub
|
101
100
|
- nats-queue
|
@@ -129,6 +128,7 @@ files:
|
|
129
128
|
- lib/nats/server/sublist.rb
|
130
129
|
- lib/nats/server/util.rb
|
131
130
|
- lib/nats/server/varz.rb
|
131
|
+
- lib/nats/version.rb
|
132
132
|
- nats.gemspec
|
133
133
|
homepage: https://nats.io
|
134
134
|
licenses:
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
152
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.
|
153
|
+
rubygems_version: 2.5.1
|
154
154
|
signing_key:
|
155
155
|
specification_version: 4
|
156
156
|
summary: NATS is an open-source, high-performance, lightweight cloud messaging system.
|