nats 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c785185ca50a110f1e5097074eb94932875ec56f
4
- data.tar.gz: fdf520606b0140c0ea01ecce19ef4a7a2e60c5fb
3
+ metadata.gz: 23d54c2e2890b69cdb422808a4f94a93a6cac269
4
+ data.tar.gz: 55c83a91c62c749121200bf33fd82d0d1fd021ac
5
5
  SHA512:
6
- metadata.gz: 8caccc1be68f33b8a06385e002646ca4e9ac3bb8aea387f192a95d46978a84df8d28898f03f9b932bf9c0e7a0d9a6de9f4476041770f28b96be853f5b4fae3e1
7
- data.tar.gz: 7f9280338f75b80a1088d2d5ac280efb239449de5a87987d3725883bd0257768cebb36b19ca9e2fe9b2d6e47a3be48494a73c16711e48e99a5bac672e107efb6
6
+ metadata.gz: a5bf18160bb411b9cff709e4d0c9bc236cbdeb2c84e28f2745e0be7bd806f010df525ffd13d7971ce6b51e51a451c066c39b6c3dfacfe2a66c2da6917e537946
7
+ data.tar.gz: 7257c4a1d832e49c2bcc0df2a3b4e5ad162e44d1a8062b9510dd84c8a5748c8dde7c44c9eda398fb421a7d1d62ac721488fcb17ed830d9b91fd17f192b1823eb
data/HISTORY.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # HISTORY
2
2
 
3
+ ## v0.8.2 (March 14, 2017)
4
+ - Allow setting name from client on connect (#129)
5
+ - Add discovered servers helper for servers announced via async INFO (#136)
6
+ - Add time based reconnect backoff (#139)
7
+ - Modify lang sent on connect when using jruby (#135)
8
+
9
+ ## v0.8.0 (August 10, 2016)
10
+ - Added cluster auto discovery handling which is supported on v0.9.2 server release (#125)
11
+ - Added jruby part of the build (both in openjdk and oraclejdk runtimes) (#122 #123)
12
+ - Fixed ping interval accounting (#120)
13
+
3
14
  ## v0.7.1 (July 8, 2016)
4
15
  - Remove dependencies which are no longer needed for ruby-client
5
16
  - See full list @ https://github.com/nats-io/ruby-nats/compare/v0.7.0...v0.7.1
data/README.md CHANGED
@@ -3,15 +3,14 @@
3
3
  A [Ruby](http://ruby-lang.org) client for the [NATS messaging system](https://nats.io).
4
4
 
5
5
  [![License MIT](https://img.shields.io/npm/l/express.svg)](http://opensource.org/licenses/MIT)
6
- [![Build Status](https://travis-ci.org/nats-io/ruby-nats.svg)](http://travis-ci.org/nats-io/ruby-nats) [![Gem Version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=rb&type=5&v=0.7.1)](https://rubygems.org/gems/nats/versions/0.7.1) [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/nats-io/ruby-nats)
7
-
6
+ [![Build Status](https://travis-ci.org/nats-io/ruby-nats.svg)](http://travis-ci.org/nats-io/ruby-nats) [![Gem Version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=rb&type=5&v=0.8.0)](https://rubygems.org/gems/nats/versions/0.8.0) [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/nats-io/ruby-nats)
8
7
 
9
8
  ## Supported Platforms
10
9
 
11
10
  This gem and the client are known to work on the following Ruby platforms:
12
11
 
13
12
  - MRI 1.9, 2.0, 2.1, 2.2, 2.3.0
14
- - JRuby 1.6.8 (experimental)
13
+ - JRuby 9.1.2.0
15
14
 
16
15
  ## Getting Started
17
16
 
@@ -96,14 +95,36 @@ end
96
95
  opts = {
97
96
  :dont_randomize_servers => true,
98
97
  :reconnect_time_wait => 0.5,
99
- :max_reconnect_attempts = 10,
98
+ :max_reconnect_attempts => 10,
100
99
  :servers => ['nats://127.0.0.1:4222', 'nats://127.0.0.1:4223', 'nats://127.0.0.1:4224']
101
100
  }
102
101
 
103
102
  NATS.connect(opts) do |c|
104
103
  puts "NATS is connected!"
105
104
  end
105
+ ```
106
+
107
+ ### Auto discovery
108
+
109
+ Starting from release `0.8.0` of the gem, the client also auto discovers
110
+ new nodes announced by the server as they attach to the cluster.
111
+ Reconnection logic parameters such as time to back-off on failure and max attempts
112
+ apply the same to both discovered nodes and those defined explicitly on connect:
113
+
114
+ ```ruby
115
+ opts = {
116
+ :dont_randomize_servers => true,
117
+ :reconnect_time_wait => 0.5,
118
+ :max_reconnect_attempts => 10,
119
+ :servers => ['nats://127.0.0.1:4222', 'nats://127.0.0.1:4223'],
120
+ :user => 'secret',
121
+ :pass => 'deadbeef'
122
+ }
106
123
 
124
+ NATS.connect(opts) do |c|
125
+ # Confirm number of available servers in cluster.
126
+ puts "Connected to NATS! Servers in pool: #{c.server_pool.count}"
127
+ end
107
128
  ```
108
129
 
109
130
  ## Advanced Usage
@@ -20,7 +20,7 @@ msg ||= 'Hello World'
20
20
 
21
21
  NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
22
22
 
23
- NATS.start(:uri => $nats_server, :autostart => true) do
23
+ NATS.start(:uri => $nats_server) do
24
24
  NATS.publish(subject, msg) { NATS.stop }
25
25
  end
26
26
 
@@ -41,7 +41,7 @@ end
41
41
 
42
42
  NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
43
43
 
44
- NATS.start(:uri => $nats_server, :autostart => true) do
44
+ NATS.start(:uri => $nats_server) do
45
45
  puts "Listening on [#{subject}], queue group [#{queue_group}]" unless $show_raw
46
46
  NATS.subscribe(subject, :queue => queue_group) { |msg, _, sub|
47
47
  puts decorate(sub, msg)
@@ -42,7 +42,7 @@ end
42
42
 
43
43
  NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
44
44
 
45
- NATS.start(:uri => $nats_server, :autostart => true) do
45
+ NATS.start(:uri => $nats_server) do
46
46
  NATS.request(subject, msg) { |(msg, reply)|
47
47
  puts decorate(msg)
48
48
  exit! if $responses && ($responses-=1) < 1
@@ -40,7 +40,7 @@ end
40
40
 
41
41
  NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
42
42
 
43
- NATS.start(:uri => $nats_server, :autostart => true) do
43
+ NATS.start(:uri => $nats_server) do
44
44
  puts "Listening on [#{subject}]" unless $show_raw
45
45
  NATS.subscribe(subject) { |msg, _, sub| puts decorate(sub, msg) }
46
46
  end
@@ -10,7 +10,6 @@ require "#{ep}/version"
10
10
 
11
11
  module NATS
12
12
 
13
- PROTOCOL_VERSION = 1
14
13
  DEFAULT_PORT = 4222
15
14
  DEFAULT_URI = "nats://localhost:#{DEFAULT_PORT}".freeze
16
15
 
@@ -519,14 +518,15 @@ module NATS
519
518
  cs = {
520
519
  :verbose => @options[:verbose],
521
520
  :pedantic => @options[:pedantic],
522
- :lang => :ruby,
523
- :version => VERSION,
524
- :protocol => PROTOCOL_VERSION
521
+ :lang => ::NATS::LANG,
522
+ :version => ::NATS::VERSION,
523
+ :protocol => ::NATS::PROTOCOL_VERSION
525
524
  }
526
525
  if auth_connection?
527
526
  cs[:user] = @uri.user
528
527
  cs[:pass] = @uri.password
529
528
  end
529
+ cs[:name] = @options[:name] if @options[:name]
530
530
  cs[:ssl_required] = @ssl if @ssl
531
531
  cs[:tls_required] = true if @tls
532
532
 
@@ -680,7 +680,7 @@ module NATS
680
680
  u.password ||= @uri.password if @uri.password
681
681
  end
682
682
 
683
- srvs << { :uri => u, :reconnect_attempts => 0 }
683
+ srvs << { :uri => u, :reconnect_attempts => 0, :discovered => true }
684
684
  end
685
685
  end
686
686
  srvs.shuffle! unless @options[:dont_randomize_servers]
@@ -810,7 +810,14 @@ module NATS
810
810
  end
811
811
 
812
812
  def should_delay_connect?(server)
813
- server[:was_connected] && server[:reconnect_attempts] >= 0
813
+ case
814
+ when server[:was_connected]
815
+ server[:reconnect_attempts] >= 0
816
+ when server[:last_reconnect_attempt]
817
+ (MonotonicTime.now - server[:last_reconnect_attempt]) < @options[:reconnect_time_wait]
818
+ else
819
+ false
820
+ end
814
821
  end
815
822
 
816
823
  def schedule_reconnect #:nodoc:
@@ -823,7 +830,7 @@ module NATS
823
830
  # Allow notifying from which server we were disconnected,
824
831
  # but only when we didn't trigger disconnecting ourselves.
825
832
  if @disconnect_cb and connected? and not closing?
826
- disconnect_cb.call(NATS::ConnectError.new(disconnect_error_string))
833
+ @disconnect_cb.call(NATS::ConnectError.new(disconnect_error_string))
827
834
  end
828
835
 
829
836
  # If we are closing or shouldn't reconnect, go ahead and disconnect.
@@ -889,6 +896,10 @@ module NATS
889
896
  def attempt_reconnect #:nodoc:
890
897
  @reconnect_timer = nil
891
898
  current = server_pool.first
899
+
900
+ # Snapshot time when trying to reconnect to server
901
+ # in order to back off for subsequent attempts.
902
+ current[:last_reconnect_attempt] = MonotonicTime.now
892
903
  current[:reconnect_attempts] ||= 0
893
904
  current[:reconnect_attempts] += 1
894
905
 
@@ -934,6 +945,12 @@ module NATS
934
945
  connected? ? @uri : nil
935
946
  end
936
947
 
948
+ # Retrieves the list of servers which have been discovered
949
+ # via server connect_urls announcements
950
+ def discovered_servers
951
+ server_pool.select {|s| s[:discovered] }
952
+ end
953
+
937
954
  def bind_primary #:nodoc:
938
955
  first = server_pool.first
939
956
  @uri = first[:uri]
@@ -974,4 +991,23 @@ module NATS
974
991
  "<nats client v#{NATS::VERSION}>"
975
992
  end
976
993
 
994
+ class MonotonicTime
995
+ class << self
996
+ case
997
+ when defined?(Process::CLOCK_MONOTONIC)
998
+ def now
999
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
1000
+ end
1001
+ when RUBY_ENGINE == 'jruby'
1002
+ def now
1003
+ java.lang.System.nanoTime() / 1_000_000_000.0
1004
+ end
1005
+ else
1006
+ def now
1007
+ # Fallback to regular time behavior
1008
+ ::Time.now.to_f
1009
+ end
1010
+ end
1011
+ end
1012
+ end
977
1013
  end
@@ -1,3 +1,6 @@
1
1
  module NATS
2
- VERSION = "0.8.0".freeze
2
+ # NOTE: These are all announced to the server on CONNECT
3
+ VERSION = "0.8.2".freeze
4
+ LANG = RUBY_ENGINE
5
+ PROTOCOL_VERSION = 1
3
6
  end
@@ -16,7 +16,7 @@ spec = Gem::Specification.new do |s|
16
16
 
17
17
  s.authors = ['Derek Collison']
18
18
  s.email = ['derek.collison@gmail.com']
19
- s.add_dependency('eventmachine', '~> 1.2', '>= 1.2.0')
19
+ s.add_dependency('eventmachine', '~> 1.2', '>= 1.2')
20
20
 
21
21
  s.require_paths = ['lib']
22
22
  s.bindir = 'bin'
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.8.0
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Collison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-10 00:00:00.000000000 Z
11
+ date: 2017-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '1.2'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.2.0
22
+ version: '1.2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '1.2'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.2.0
32
+ version: '1.2'
33
33
  description: NATS is an open-source, high-performance, lightweight cloud messaging
34
34
  system.
35
35
  email: