protobuf-nats 0.9.0.pre2 → 0.9.0.pre3
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 +4 -4
- data/README.md +6 -0
- data/lib/protobuf/nats/client.rb +3 -0
- data/lib/protobuf/nats/config.rb +8 -1
- data/lib/protobuf/nats/jnats.rb +17 -7
- data/lib/protobuf/nats/server.rb +23 -2
- data/lib/protobuf/nats/version.rb +1 -1
- data/lib/protobuf/nats.rb +33 -36
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22955c5ba9df8f9ad52ea33c197fd740cdfe8434
|
4
|
+
data.tar.gz: ff0dc5ef47d11178b7f8960030f025a389f2024c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e75e969b3ce1561a4d402931147e5a8b4e52d09b47e36c3809694d3069b4f47c2d304771b5dd3167c44ab44e283af9000458aec6ddf6f018525f5b24dbeb70e
|
7
|
+
data.tar.gz: 340adf7236b84ec9f1d9a519a03d64ef0e31dcacbbecdd5bfa856db078608c70bd4571b4a02569095a3243933bccf76ab8025e11519d5dc4f61e795401f750af
|
data/README.md
CHANGED
@@ -76,6 +76,12 @@ An example config looks like this:
|
|
76
76
|
tls_client_key: "/path/to/client-key.pem"
|
77
77
|
tls_ca_cert: "/path/to/ca.pem"
|
78
78
|
connect_timeout: 2
|
79
|
+
server_subscription_key_only_subscribe_to_when_includes_any_of:
|
80
|
+
- "search"
|
81
|
+
- "create"
|
82
|
+
server_subscription_key_do_not_subscribe_to_when_includes_any_of:
|
83
|
+
- "old_search"
|
84
|
+
- "old_create"
|
79
85
|
subscription_key_replacements:
|
80
86
|
- "original_service": "replacement_service"
|
81
87
|
```
|
data/lib/protobuf/nats/client.rb
CHANGED
@@ -126,6 +126,9 @@ module Protobuf
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def send_request
|
129
|
+
# This will ensure the client is started.
|
130
|
+
::Protobuf::Nats.start_client_nats_connection
|
131
|
+
|
129
132
|
if use_subscription_pooling?
|
130
133
|
available = self.class.subscription_pool.instance_variable_get("@available")
|
131
134
|
::ActiveSupport::Notifications.instrument "client.subscription_pool_available_size.protobuf-nats", available.length
|
data/lib/protobuf/nats/config.rb
CHANGED
@@ -4,7 +4,10 @@ require "yaml"
|
|
4
4
|
module Protobuf
|
5
5
|
module Nats
|
6
6
|
class Config
|
7
|
-
attr_accessor :uses_tls, :servers, :connect_timeout, :tls_client_cert, :tls_client_key, :tls_ca_cert, :max_reconnect_attempts
|
7
|
+
attr_accessor :uses_tls, :servers, :connect_timeout, :tls_client_cert, :tls_client_key, :tls_ca_cert, :max_reconnect_attempts
|
8
|
+
attr_accessor :server_subscription_key_do_not_subscribe_to_when_includes_any_of,
|
9
|
+
:server_subscription_key_only_subscribe_to_when_includes_any_of,
|
10
|
+
:subscription_key_replacements
|
8
11
|
|
9
12
|
CONFIG_MUTEX = ::Mutex.new
|
10
13
|
|
@@ -16,6 +19,8 @@ module Protobuf
|
|
16
19
|
:tls_client_key => nil,
|
17
20
|
:tls_ca_cert => nil,
|
18
21
|
:uses_tls => false,
|
22
|
+
:server_subscription_key_do_not_subscribe_to_when_includes_any_of => [],
|
23
|
+
:server_subscription_key_only_subscribe_to_when_includes_any_of => [],
|
19
24
|
:subscription_key_replacements => [],
|
20
25
|
}.freeze
|
21
26
|
|
@@ -62,6 +67,8 @@ module Protobuf
|
|
62
67
|
tls_client_key: tls_client_key,
|
63
68
|
tls_ca_cert: tls_ca_cert,
|
64
69
|
connect_timeout: connect_timeout,
|
70
|
+
server_subscription_key_do_not_subscribe_to_when_includes_any_of: server_subscription_key_do_not_subscribe_to_when_includes_any_of,
|
71
|
+
server_subscription_key_only_subscribe_to_when_includes_any_of: server_subscription_key_only_subscribe_to_when_includes_any_of,
|
65
72
|
subscription_key_replacements: subscription_key_replacements,
|
66
73
|
}
|
67
74
|
options[:tls] = {:context => new_tls_context} if uses_tls
|
data/lib/protobuf/nats/jnats.rb
CHANGED
@@ -13,7 +13,7 @@ end
|
|
13
13
|
module Protobuf
|
14
14
|
module Nats
|
15
15
|
class JNats
|
16
|
-
attr_reader :connection
|
16
|
+
attr_reader :connection, :options
|
17
17
|
|
18
18
|
class Message
|
19
19
|
attr_reader :data, :subject, :reply
|
@@ -30,11 +30,14 @@ module Protobuf
|
|
30
30
|
@on_reconnect_cb = lambda {}
|
31
31
|
@on_disconnect_cb = lambda {}
|
32
32
|
@on_close_cb = lambda {}
|
33
|
+
@options = nil
|
33
34
|
@subz_cbs = {}
|
34
35
|
@subz_mutex = ::Mutex.new
|
35
36
|
end
|
36
37
|
|
37
38
|
def connect(options = {})
|
39
|
+
@options ||= options
|
40
|
+
|
38
41
|
servers = options[:servers] || ["nats://localhost:4222"]
|
39
42
|
servers = [servers].flatten.map { |uri_string| java.net.URI.new(uri_string) }
|
40
43
|
connection_factory = ::Java::IoNatsClient::ConnectionFactory.new
|
@@ -68,9 +71,16 @@ module Protobuf
|
|
68
71
|
@connection
|
69
72
|
end
|
70
73
|
|
71
|
-
|
74
|
+
def connection
|
75
|
+
return @connection unless @connection.nil?
|
76
|
+
# Ensure no consumer or supervisor are running
|
77
|
+
close
|
78
|
+
connect(options || {})
|
79
|
+
end
|
80
|
+
|
81
|
+
# Do not depend on #close for a graceful disconnect.
|
72
82
|
def close
|
73
|
-
@connection.close
|
83
|
+
@connection.close rescue nil
|
74
84
|
@connection = nil
|
75
85
|
@supervisor.kill rescue nil
|
76
86
|
@supervisor = nil
|
@@ -79,7 +89,7 @@ module Protobuf
|
|
79
89
|
end
|
80
90
|
|
81
91
|
def flush(timeout_sec = 0.5)
|
82
|
-
|
92
|
+
connection.flush(timeout_sec * 1000)
|
83
93
|
end
|
84
94
|
|
85
95
|
def next_message(sub, timeout_sec)
|
@@ -90,7 +100,7 @@ module Protobuf
|
|
90
100
|
|
91
101
|
def publish(subject, data, mailbox = nil)
|
92
102
|
# The "true" here is to force flush. May not need this.
|
93
|
-
|
103
|
+
connection.publish(subject, mailbox, data.to_java_bytes, true)
|
94
104
|
end
|
95
105
|
|
96
106
|
def subscribe(subject, options = {}, &block)
|
@@ -100,8 +110,8 @@ module Protobuf
|
|
100
110
|
# We pass our work queue for processing async work because java nats
|
101
111
|
# uses a cahced thread pool: 1 thread per async subscription.
|
102
112
|
# Sync subs need their own queue so work is not processed async.
|
103
|
-
work_queue = block.nil? ?
|
104
|
-
sub =
|
113
|
+
work_queue = block.nil? ? connection.createMsgChannel : @work_queue
|
114
|
+
sub = connection.subscribe(subject, queue, nil, work_queue)
|
105
115
|
|
106
116
|
# Register the block callback. We only lock to save the callback.
|
107
117
|
if block
|
data/lib/protobuf/nats/server.rb
CHANGED
@@ -80,6 +80,24 @@ module Protobuf
|
|
80
80
|
was_enqueued
|
81
81
|
end
|
82
82
|
|
83
|
+
def do_not_subscribe_to_includes?(subscription_key)
|
84
|
+
return false unless ::Protobuf::Nats.config.server_subscription_key_do_not_subscribe_to_when_includes_any_of.respond_to?(:any?)
|
85
|
+
return false if ::Protobuf::Nats.config.server_subscription_key_do_not_subscribe_to_when_includes_any_of.empty?
|
86
|
+
|
87
|
+
::Protobuf::Nats.config.server_subscription_key_do_not_subscribe_to_when_includes_any_of.any? do |key|
|
88
|
+
subscription_key.include?(key)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def only_subscribe_to_includes?(subscription_key)
|
93
|
+
return true unless ::Protobuf::Nats.config.server_subscription_key_only_subscribe_to_when_includes_any_of.respond_to?(:any?)
|
94
|
+
return true if ::Protobuf::Nats.config.server_subscription_key_only_subscribe_to_when_includes_any_of.empty?
|
95
|
+
|
96
|
+
::Protobuf::Nats.config.server_subscription_key_only_subscribe_to_when_includes_any_of.any? do |key|
|
97
|
+
subscription_key.include?(key)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
83
101
|
def pause_file_path
|
84
102
|
::ENV.fetch("PB_NATS_SERVER_PAUSE_FILE_PATH", nil)
|
85
103
|
end
|
@@ -108,9 +126,12 @@ module Protobuf
|
|
108
126
|
service_klasses.each do |service_klass|
|
109
127
|
service_klass.rpcs.each do |service_method, _|
|
110
128
|
# Skip services that are not implemented.
|
111
|
-
next unless service_klass.method_defined?
|
129
|
+
next unless service_klass.method_defined?(service_method)
|
130
|
+
subscription_key = ::Protobuf::Nats.subscription_key(service_klass, service_method)
|
131
|
+
next if do_not_subscribe_to_includes?(subscription_key)
|
132
|
+
next unless only_subscribe_to_includes?(subscription_key)
|
112
133
|
|
113
|
-
yield
|
134
|
+
yield subscription_key
|
114
135
|
end
|
115
136
|
end
|
116
137
|
end
|
data/lib/protobuf/nats.rb
CHANGED
@@ -78,43 +78,40 @@ module Protobuf
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def self.start_client_nats_connection
|
81
|
-
@start_client_nats_connection
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
@client_nats_connection.on_reconnect do
|
105
|
-
logger.warn("Client NATS connection was reconnected")
|
106
|
-
end
|
107
|
-
|
108
|
-
@client_nats_connection.on_close do
|
109
|
-
logger.warn("Client NATS connection was closed")
|
110
|
-
end
|
111
|
-
|
112
|
-
@client_nats_connection.on_error do |error|
|
113
|
-
notify_error_callbacks(error)
|
114
|
-
end
|
115
|
-
|
116
|
-
true
|
81
|
+
return true if @start_client_nats_connection && @client_nats_connection
|
82
|
+
|
83
|
+
GET_CONNECTED_MUTEX.synchronize do
|
84
|
+
break true if @client_nats_connection
|
85
|
+
break true if @start_client_nats_connection
|
86
|
+
|
87
|
+
# Disable publisher pending buffer on reconnect
|
88
|
+
options = config.connection_options.merge(:disable_reconnect_buffer => true)
|
89
|
+
|
90
|
+
client = NatsClient.new
|
91
|
+
client.connect(options)
|
92
|
+
|
93
|
+
# Ensure we have a valid connection to the NATS server.
|
94
|
+
client.flush(5)
|
95
|
+
|
96
|
+
client.on_disconnect do
|
97
|
+
logger.warn("Client NATS connection was disconnected")
|
98
|
+
end
|
99
|
+
|
100
|
+
client.on_reconnect do
|
101
|
+
logger.warn("Client NATS connection was reconnected")
|
117
102
|
end
|
103
|
+
|
104
|
+
client.on_close do
|
105
|
+
logger.warn("Client NATS connection was closed")
|
106
|
+
end
|
107
|
+
|
108
|
+
client.on_error do |error|
|
109
|
+
notify_error_callbacks(error)
|
110
|
+
end
|
111
|
+
|
112
|
+
@client_nats_connection = client
|
113
|
+
|
114
|
+
true
|
118
115
|
end
|
119
116
|
end
|
120
117
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-nats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Dewitt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|